如何检查某单元格所有单词是否存在于另一单元格(不考虑顺序)
检查单元格中所有单词是否都存在于另一个单元格(不考虑顺序)
如果你需要验证某单元格中的所有单词,是否全部存在于另一个单元格的文本中(无需考虑单词顺序),可以用以下几种Excel公式实现:
示例场景
| 搜索词 | 待搜索内容 | 匹配? |
|---|---|---|
| Apple Bicycle | Bicycle Tree Apple | Match |
| Cat Train | Train Boy Banana | No Match |
方法1:Excel 365/2021 动态数组简洁写法
适用于支持动态数组的Excel版本(365、2021及以后),公式更简洁直观:
假设「搜索词」在A列,「待搜索内容」在B列,在C2单元格输入公式后直接回车,下拉填充即可:
=IF(AND(ISNUMBER(XMATCH(TEXTSPLIT(A2," "),TEXTSPLIT(B2," ")))),"Match","No Match")
逻辑说明:
TEXTSPLIT(A2," ")将搜索词按空格拆分成独立单词数组TEXTSPLIT(B2," ")将待搜索内容拆分成单词数组XMATCH逐个检查搜索词数组中的每个单词是否存在于待搜索数组,存在返回位置值,不存在返回错误ISNUMBER把结果转为布尔值(存在=TRUE,不存在=FALSE)AND判断所有单词是否都存在,最终通过IF输出对应结果
方法2:兼容旧版Excel的数组公式
针对Excel 2019及更早版本,需要用数组公式实现:
在C2单元格输入公式后,按 Ctrl+Shift+Enter 完成输入(旧版数组公式必填操作),再下拉填充:
=IF(AND(ISNUMBER(SEARCH(" "&TRIM(MID(SUBSTITUTE(A2," ",REPT(" ",99)),ROW(INDIRECT("1:"&LEN(A2)-LEN(SUBSTITUTE(A2," ",""))+1))*99-98,99))&" "," "&B2&" "))),"Match","No Match")
逻辑说明:
SUBSTITUTE(A2," ",REPT(" ",99))将单个空格替换为99个空格,方便拆分单词MID+ROW(INDIRECT(...))逐个提取每个单词的片段TRIM清理单词前后的多余空格- 给单词和待搜索内容前后加空格(
" "&单词&" "),避免部分匹配(比如防止把"Apple"误判为存在于"Apples"中) SEARCH检查每个单词是否存在,最终通过AND+IF输出结果
方法3:使用FILTERXML函数(部分版本支持)
如果你的Excel支持FILTERXML函数,可以用更易读的公式:
=IF(AND(COUNTIF(" "&B2&" ","* "&TRIM(FILTERXML("<t><s>"&SUBSTITUTE(A2," ","</s><s>")&"</s></t>","//s"))&" *")>0),"Match","No Match")
逻辑说明:
- 将搜索词转换为XML节点字符串,通过
FILTERXML提取所有独立单词 - 用
COUNTIF检查每个单词是否存在于待搜索内容中(同样通过前后加空格避免部分匹配) AND判断所有单词都存在后,输出对应结果
注意事项
- 以上公式默认不区分大小写,如需区分,可将
SEARCH替换为FIND,或给XMATCH添加参数0(即XMATCH(..., ..., 0)) - 如果单词分隔符不是空格,需将公式中的
" "替换为实际分隔符(比如逗号,)
内容的提问来源于stack exchange,提问作者user2597747
相关产品推荐
相关产品推荐

