在 excel 中查找匹配通配符的索引

Finding the index of a matching wildcard in excel

给定一个 sheet 像这样:

Sheet 1

Product Name
-----------------
Fancy Shoes
Plain Shoes
Comfy Slippers
Nice Loafers
Pressed Shirt
Tee Shirt
Collared Button-Up

和一个 sheet 通配符:

Sheet 2

Product Wildcard   |   Product Category
---------------------------------------
*Shirt             |   Shirt
*Button-Up         |   Shirt
*Shoes             |   Shoes
*Loafers           |   Shoes
*Slippers          |   Shoes

我希望产生以下结果:

Product Name       |   Product Category
----------------------------------------
Fancy Shoes        |   Shoes
Plain Shoes        |   Shoes
Comfy Slippers     |   Shoes
Nice Loafers       |   Shoes
Pressed Shirt      |   Shirt
Tee Shirt          |   Shirt
Collared Button-Up |   Shirt

换句话说,我可以在 Sheet 1 中查找与 Sheet 2 中的产品通配符相匹配的产品类别吗?

我试过使用 VLOOKUP('Sheet 1'!A2, 'Sheet 2'!A2:B6, 2, FALSE)MATCH('Sheet 1'!A2, 'Sheet 2'!A2:A6, 0)。都给我#N/A。我怀疑这些函数期望搜索文本是唯一可以使用通配符的东西,而我的产品通配符是按字面意思理解的,而不是解释为通配符。

我想知道是否有另一种方法可以使用内置 Excel 函数来完成此操作,或者我是否需要编写一些 VBA?

在此先感谢您的帮助!

下面是一个数组公式(用Ctrl+Shift+回车输入) :

=INDEX(Sheet2!$B:$B,MATCH(1,MATCH(Sheet2!$A:$A,Sheet1!A1,0),0))

您可以在包含公式的单元格上使用 "Formulas" > "Evaluate Formula" 来逐步查看它是如何工作的。

根据我的阅读 here(特别是底部的注释),单独使用 VLOOKUP 似乎是不可能的。如果你所有的通配符都没有 spaces,你可以这样做:(不是明确的公式,只是算法步骤的列表)

  • 反转字符串,用something like this(这是一个数组公式,所以需要Ctrl+Shift+Enter才能使用)
  • 使用 FIND 获取反向版本中第一个 space 的位置,从字符串的 LEN 中减去它得到通配符位之前的字符串数量.
  • 使用 RIGHT 将字符串截断为通配符,并将其与 VLOOKUP 一起使用。

如果每个单元格中只有两个词确定类别的词(例如:鞋子、拖鞋、衬衫等...)是总是第二个,您可以使用以下 INDEX/MATCH 获取类别:

=INDEX('Sheet 2'!B:B,MATCH(MID('Sheet 1'!A2,FIND(" ",'Sheet 1'!A2)+1,LEN('Sheet 1'!A2)-FIND(" ",'Sheet 1'!A2)),'Sheet 2'!A:A,0))