Excel/LibreOffice Calc反向部分匹配

Excel/LibreOffice Calc反向部分匹配,excel,excel-formula,libreoffice,openoffice-calc,libreoffice-calc,Excel,Excel Formula,Libreoffice,Openoffice Calc,Libreoffice Calc,我想使用查找表根据每一行的描述列为每一行选择一个标记。描述包含映射到标记的关键字。因此,我需要部分匹配关键字列表,如下所示: A B C D E 1 Description Tag Keyword Tag 2 lorem KEYA ipsum KEYA Tag A 3 dolor sit KEYC

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

  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列中的单元格。我可以用像这样的东西

=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", 
 ""))))
=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", 
 ""))))
您有什么建议吗?

解析A列中的KEYx文本以用作
VLOOKUP
中的查找值

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

附录:对于OpenOffice/LibreOffice:


B2的公式是:
=IF(iError(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))
。根据需要填写。

尝试使用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中对应的行号。它获取最大匹配行,并使用索引查找E$2:E$5中的对应元素。如果没有匹配的键,它将给出一个#值!错误

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

如果您有一个箱子有两个或更多匹配的钥匙,例如

lorem KEYA KEYB ipsum
您将获得列表中最后一个匹配项,即标记B


谢谢,但并非所有我的关键字都包含“KEY”init。它们是任意的关键字。抱歉不清楚。
FIND(D$2:D$5,A2)
part在LibreOffice中似乎不起作用。我总是会得到“#VALUE!”我会尝试使用Excel。我没有在LibreOffice中尝试过,但在Excel和OpenOffice中效果不错。使用OpenOffice的唯一区别(除了分号)是我必须复制并粘贴数组公式,而不是下拉它。如果您将FIND部分单独放入,则应获得值7,后跟三个#值!单元格-在我的答案中通过ISERROR函数给出的公式中删除这些单元格。