大多数情况下,当我的查找表包含较长的描述并且其中一部分可能与我的查找值匹配时,我会在 VLOOKUP 中使用通配符来获得匹配。
我现在有相反的用例;我有一个包含银行交易的表格,并且想在该表格中添加一列,以表明交易属于哪个类别。对于常见的付款,我创建了第二个表格,其中包含链接到类别的一般关键字,因此我不必手动填写它们。因此,我的主表格(我的 vlookup 将在其中找到位置的最后一列)如下所示:
我的查找表可能如下所示:
我现在如何构造“类别”中的 VLOOKUP,以便仅根据其查找的字符串的一部分在查找表中找到适当的值?
即,如果我的主表包含值“abc KEYWORD def”并且我的查找表包含键“KEYWORD”,我希望查找调用将其与它为“KEYWORD”找到的值进行匹配。
我尝试过像这样使用整个通配符=VLOOKUP("*"&LookupCell&"*", LookupTable, 2, FALSE)
,但据我所知,它的工作方式与我想要做的完全相反,通过检查我的查找表是否可能包含类似“otherstuff abc KEYWORD def otherstuff”的键。
答案1
对于 Excel 2019,请参阅编辑1以下
看看这是否适合你。我还没有对其进行广泛的测试。
请参阅所附的屏幕截图来了解示例数据的组织方式。
E3 中的公式是
=TEXTJOIN("",TRUE,IFERROR(VLOOKUP(FILTERXML("<t><s>"&SUBSTITUTE(C3," ","</s><s>")&"</s></t>","//s"),$C$12:$D$16,2,FALSE),""))
选择它并将其向下拖动到所需的行。
这已在 Excel 2021 上测试,默认情况下会自动创建数组公式。但在 2019 年,您可能需要在公式栏内按CTRL+ SHIFT+来ENTER创建数组公式。
数组公式将自动括在花括号中。
请检查这是否适合您。
我猜问题在于如果有多个匹配项,公式可能会出现错误或在一行中显示所有条目!
编辑1-
上述解决方案仅适用于 Excel 2021 或 O365,但如果您使用的是 Excel 2019,则数组公式原样将不起作用。已在 Excel 2019 上检查。
这里您需要一个稍微不同的解决方案。
请参阅下面的屏幕截图以了解示例数据和公式。
E3 中的公式是
=TEXTJOIN("",TRUE,IFERROR(INDEX($D$12:$D$16,N(IF(1,MATCH((TRANSPOSE((FILTERXML("<t><s>"&SUBSTITUTE(C3," ","</s><s>")&"</s></t>","//s")))),$C$12:$C$16,0)))),""))
在公式栏中按CTRL+ SHIFT+ENTER创建数组公式。公式将自动括在花括号中,以表明它是一个数组公式。
现在将其向下拖至预期的行。
答案2
答案3
以下是使用此公式的另一种方法:=LET(findArray,ISNUMBER(FIND($A$11:$A$16,UPPER(A2))),VLOOKUP(TRUE,HSTACK(findArray,$B$11:$B$16),2,FALSE))
LET
- 允许命名计算以供进一步使用
findArray
- 我的变量的名称
ISNUMBER(FIND($A$11:$A$16,UPPER(A2)))
ISNUMBER
-根据与 的匹配创建一个真/假数组FIND
。UPPER
由于区分大小写,因此使用 。
VLOOKUP(TRUE,HSTACK(findArray,$B$11:$B$16),2,FALSE)
— 通常在重建的表中VLOOKUP
寻找。TRUE
HSTACK
两个注意事项:1) 通用类别必须具有唯一值。2) 如果供应商名称可能属于两个通用类别(另一个供应商的名称为 Miles seDMan)。根据您想要如何处理此问题,可以使用过滤器和 textjoin 代替 vlookup。