我想使用查找表根据每行的描述列选择一个标签。描述包含映射到标签的关键字。因此,我需要部分匹配关键字列表,如下所示:
A B C D E
1 Description Tag Keyword Tag
2 lorem KEYA ipsum KEYA Tag A
3 dolor sit KEYC amet KEYB Tag B
4 KEYB consectetur KEYC Tag C
5 adipiscing elit KEYA KEYD Tag D
6 sed do KEYB eiusmod
我想用 D2:E5 中查找表中的值填充 B 列中的单元格。我可以使用类似的东西
=VLOOKUP("."&$A2&".", $D$3:$E$6, 2, 0)
但它不起作用,因为我尝试将全文与部分文本进行匹配。
=VLOOKUP($A2, "."&$D$3:$E$6&".", 2, 0)
也不起作用。显然,正则表达式仅在搜索条件中受支持。我不喜欢写这样的东西
=IF(ISNUMBER(SEARCH("KEYA",$A2)), "Tag A",
IF(ISNUMBER(SEARCH("KEYB",$A2)), "Tag B",
IF(ISNUMBER(SEARCH("KEYC",$A2)), "Tag C",
IF(ISNUMBER(SEARCH("KEYD",$A2)), "Tag D",
""))))
你有什么建议吗?
最佳答案
尝试使用 Ctrl-Shift-Enter 将此数组公式放入 B2 中并将其复制下来:-
=INDEX(E$2:E$5,MAX((NOT(ISERROR(FIND(D$2:D$5,A2)))*ROW(D$2:$D$5))-1))
它使用 FIND 尝试依次匹配 A2 中任意位置的每个键。如果匹配,则计算出 D$2:D$5 中相应的行号。它取最大匹配行,并使用INDEX在E$2:E$5中查找对应的元素。如果没有匹配的键,它会给出#VALUE!错误。
FIND 的匹配是区分大小写的:如果您不希望它区分大小写,则需要使用 SEARCH 而不是 FIND。
如果您的箱子有两个或更多匹配的 key ,例如
lorem KEYA KEYB ipsum
您将获得列表中最后一个匹配的标签,即标签 B。
关于Excel/LibreOffice Calc 反向部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340878/