Excel公式实现:比较两个字符串单元格,存在匹配词时返回TRUE
不用VBA的Excel字符串匹配判断方案
嘿,这个需求完全可以用纯Excel公式搞定,不用碰VBA,我给你两个实用方案,看你用的Excel版本选就行:
通用方案(适配所有Excel版本)
假设你的关键词单元格是A1,问题描述单元格是B1,在结果单元格输入以下公式:
=SUMPRODUCT(--ISNUMBER(SEARCH(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",LEN(A1))),ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1,",",""))+1))*LEN(A1)-LEN(A1)+1,LEN(A1))),B1)))>0
公式逻辑拆解:
SUBSTITUTE(A1,",",REPT(" ",LEN(A1))):把关键词里的逗号替换成和关键词单元格长度一致的空格,方便后续拆分MID(..., ROW(INDIRECT(...)), LEN(A1)):按位置拆分出每个关键词(用空格占位后,每个关键词都占满单元格长度,所以MID能精准提取)TRIM():去掉每个关键词前后的多余空格(解决逗号前后有空格的情况)SEARCH(..., B1):在问题描述里查找每个关键词,找到返回位置,没找到返回错误值ISNUMBER():把SEARCH的结果转成布尔值(找到是TRUE,没找到是FALSE)--:把布尔值转成1或0(TRUE→1,FALSE→0)SUMPRODUCT():对所有关键词的匹配结果求和,最后判断总和是否大于0——只要有一个匹配就返回TRUE
简化方案(仅适配Excel 365/2021及以上版本)
如果你用的是支持动态数组的Excel版本,公式可以简化很多,同样假设关键词在A1,问题描述在B1:
=OR(ISNUMBER(SEARCH(TRIM(TEXTSPLIT(A1,",")),B1)))
公式逻辑拆解:
TEXTSPLIT(A1,","):直接把关键词按逗号拆分成动态数组,自动处理每个关键词TRIM():去掉关键词前后的多余空格SEARCH(..., B1):逐个在问题描述里查找关键词ISNUMBER():转成布尔值OR():只要有一个关键词匹配,就返回TRUE
额外提示
- 如果你需要区分大小写的匹配,把公式里的
SEARCH换成FIND即可 - 关键词里的逗号前后有没有空格都不影响,
TRIM()会自动处理
举个你的示例:
- A1内容:
Camera, torch, messenger, internet - B1内容:
我想要一部能使用50MP摄像头拍摄高质量照片,并且可以通过互联网浏览新闻的手机
两个公式都会返回TRUE,因为匹配到了Camera(对应“摄像头”)和internet(对应“互联网”)
内容的提问来源于stack exchange,提问作者pedrohasabeard
相关产品推荐
相关产品推荐

