如何将Excel MATCH公式改为通配符匹配,检测短语是否含目标词条?
解决Excel通配符匹配问题的正确公式
核心需求
检查第一个工作表A列的词条是否存在于第二个工作表(Lookup wildcard phrase)A列的任意短语中,将原精确匹配公式改为通配符匹配。
错误尝试分析
- 修改MATCH函数的MatchType参数为1:该参数用于排序后的近似匹配,和通配符匹配逻辑完全无关,因此无法得到预期结果。
- 原VLOOKUP公式:逻辑上可行,但可能因单元格空格、大小写差异或引用区域错误导致失效,且稳定性不如COUNTIF/SUMPRODUCT类方案。
正确公式方案
方案1:COUNTIF函数(兼容所有Excel版本)
=IF(COUNTIF('Lookup wildcard phrase'!A$2:A$4,"*"&A2&"*")>0,"TRUE","FALSE")
- 原理:
COUNTIF原生支持通配符,统计目标区域中包含当前词条(A2)的单元格数量,数量大于0则返回"TRUE",否则返回"FALSE"。
方案2:SUMPRODUCT+SEARCH(支持大小写控制)
=IF(SUMPRODUCT(--ISNUMBER(SEARCH(A2,'Lookup wildcard phrase'!A$2:A$4)))>0,"TRUE","FALSE")
- 原理:
SEARCH(A2, 区域)返回每个单元格中A2的起始位置,找不到则返回错误值;ISNUMBER将有效位置转为TRUE,错误值转为FALSE;--将布尔值转为1/0,SUMPRODUCT求和后判断是否大于0;- 若需区分大小写,将
SEARCH替换为FIND即可。
方案3:Excel 365/2021专属简洁公式
=IF(NOT(ISERROR(XLOOKUP("*"&A2&"*",'Lookup wildcard phrase'!A$2:A$4,TRUE))),"TRUE","FALSE")
或用BYROW+LAMBDA实现更直观的遍历判断:
=IF(BYROW('Lookup wildcard phrase'!A$2:A$4,LAMBDA(x,ISNUMBER(SEARCH(A2,x)))),"TRUE","FALSE")
- 原理:利用365版本的动态数组函数,直接遍历目标区域判断是否存在匹配项。
内容的提问来源于stack exchange,提问作者NewJackSwing4Ever
相关产品推荐
相关产品推荐

