在 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))
给定一个 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))