Excel / LibreOffice Calc部分匹配反向

我想使用一个查找表根据其描述列为每一行select一个标签。 说明包含映射到标签的关键字。 因此,我需要部分匹配关键字列表如下:

ABCDE 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)

也不起作用。 显然正则expression式只在search标准中被支持。 我不喜欢写一些类似的东西

 =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", "")))) 

你有什么build议吗?

尝试把这个数组公式在B2中使用Ctrl-Shift-Enter并复制下来:

 =INDEX(E$2:E$5,MAX((NOT(ISERROR(FIND(D$2:D$5,A2)))*ROW(D$2:$D$5))-1)) 

它使用FIND在A2中的任何地方轮stream尝试匹配每个键。 如果一个匹配,则在D $ 2:D $ 5中找出对应的行号。 它采用最大匹配行,并使用INDEX查找E $ 2:E $ 5中的对应元素。 如果没有匹配的键,它会给出一个#VALUE! 错误。

与FIND的匹配是区分大小写的:如果您不希望区分大小写,则需要使用SEARCH而不是FIND。

如果你可以有两个或更多的匹配键的情况下,例如

 lorem KEYA KEYB ipsum 

你会得到列表中的最后一个匹配的,即TAG B.

在这里输入图像说明

parsing列A中的KEY x文本以用作VLOOKUPlookup_value

标记通配符查找

B2中的公式为=IFERROR(VLOOKUP(MID(A2,FIND("KEY",A2),4),$C$2:$D$5,2,FALSE),"")

附录:对于OpenOffice / LibreOffice:

在这里输入图像说明

B2的公式可能是=IF(ISERROR(VLOOKUP(MID(A2;FIND("KEY";A2);4);$C$2:$D$5;2;0));"";VLOOKUP(MID(A2;FIND("KEY";A2);4);$C$2:$D$5;2;0)) 。 根据需要填写。