Excel/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 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。

enter image description here

关于Excel/LibreOffice Calc 反向部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340878/

相关文章:

vba - 清理条件格式 (Excel VBA)

java - 在 java 中填充值后,Excel 下载无法正常工作

excel - 如何删除 MS Excel 2010 单元格中除 "first"3 个字符以外的所有字符?

Excel 文本格式数字四舍五入到百万

openoffice.org - 无法访问公开接口(interface)中的所有功能?

Excel/Libreoffice Calc - 确定日期范围并仅汇总该范围内月份的值

Excel公式添加和减去产品成本的百分比

vba - 组合框的无效属性值

vba - Excel - 使用 VBA 插入公式

git - 如何获得 Libre Office Writer 保存的文件的有用 git diff,并在命令行中输出?