如何用VLOOKUP实现主表单元格包含查找表关键词的分类匹配?
如何用VLOOKUP实现主表单元格包含查找表关键词的分类匹配?
嗨,我懂你的困扰——平时用VLOOKUP加通配符都是用短查找值去匹配长表项,但这次要反过来,用查找表里的关键词去匹配主表的长交易内容,方向完全反了对吧?
你之前写的=VLOOKUP("*"&LookupCell&"*", LookupTable, 2, FALSE)确实搞反了逻辑:它是在查找表中找包含主表单元格内容的项,但你要的是查找表中的关键词被包含在主表单元格里,得换个思路来写。
给你两种可行的方案,都是基于数组公式的(旧版Excel需要按Ctrl+Shift+Enter确认,新版365/2021+直接回车就行):
方案一:VLOOKUP结合SEARCH实现
假设主表的交易内容在A2单元格,查找表的关键词列是$B$2:$B$10,分类列是$C$2:$C$10,公式可以这么写:
=VLOOKUP(TRUE, ISNUMBER(SEARCH($B$2:$B$10, A2))*$B$2:$C$10, 2, FALSE)
拆解下逻辑:
SEARCH($B$2:$B$10, A2)会逐个检查查找表的关键词是否在A2里,包含就返回位置数字,不包含返回错误值;ISNUMBER(...)把数字转成TRUE,错误值转成FALSE;- 和查找表区域相乘后,只有匹配关键词的那一行会保留原数据,其他行变成错误值;
- 最后VLOOKUP找
TRUE,就能定位到对应的分类了。
方案二:INDEX+MATCH组合(逻辑更直观)
如果觉得VLOOKUP的写法有点绕,用INDEX+MATCH的组合理解起来更简单:
=INDEX($C$2:$C$10, MATCH(TRUE, ISNUMBER(SEARCH($B$2:$B$10, A2)), 0))
这个公式的逻辑是:先用MATCH找到第一个匹配关键词的行号,再用INDEX返回对应行的分类。
几个实用提醒:
- 如果有多个关键词都能匹配主表的交易内容,公式会返回查找表中第一个出现的分类,记得把优先级高的关键词放在查找表前面;
- SEARCH是不区分大小写的,如果需要严格区分大小写,把SEARCH换成FIND就行;
- 一定要给查找表的区域加绝对引用(比如
$B$2:$B$10),不然下拉公式的时候区域会跑偏。
备注:内容来源于stack exchange,提问作者Fly
相关产品推荐
相关产品推荐

