Excel / LibreOffice Calc反向部分匹配

时间:2014-10-13 13:15:15

标签: 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 amet                       KEYB     Tag B
4 KEYB consectetur                          KEYC     Tag C
5 adipiscing elit KEYA                      KEYD     Tag D
6 sed do KEYB eiusmod                       

我想用D2中的查找表中的值填充B列中的单元格:E5。我可以使用像

这样的东西
  

= VLOOKUP(&#34;。&#34;&amp; $ A2&amp;&#34;。&#34;,$ D $ 3:$ E $ 6,2,0)< / p>

但它不会起作用,因为我试图将全文与部分文本相匹配。

  

= VLOOKUP($ A2,&#34;。&#34;&amp; $ D $ 3:$ E $ 6&amp;&#34;。&#34;,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", 
 ""))))

你有什么建议吗?

2 个答案:

答案 0 :(得分:0)

从A列解析KEY x 文本,以用作VLOOKUP中的 lookup_value

Tag wildcard lookup

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

附录:对于OpenOffice / LibreOffice:

enter image description here

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))。必要时填写。

答案 1 :(得分: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。它采用最大匹配行,并使用INDEX查找E $ 2中的相应元素:E $ 5。如果没有匹配的键,则给出#VALUE!错误。

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

如果你有一个包含两个或更多匹配键的案例,例如

lorem KEYA KEYB ipsum

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

enter image description here