Microsoft Excel:在单元格区域中查找精确或近似匹配的单元格值
Excel 实现指定区域的精确/近似匹配查找
一、精确匹配
如果需要完全匹配查找文本,直接使用XLOOKUP或VLOOKUP即可:
XLOOKUP公式(Excel 365及以上):=XLOOKUP(B2,A:A,A:A,"未找到",0)VLOOKUP公式(兼容全版本):=VLOOKUP(B2,A:A,1,FALSE)
参数0/FALSE代表严格精确匹配,找不到时返回指定的“未找到”文本。
二、近似匹配(查找文本为目标单元格的分散子串)
针对你示例中「用“John George”匹配“John David George”」的需求,即查找文本的所有单词按顺序出现在目标单元格中(中间可穿插其他内容),提供以下两种方案:
方案1:Excel 365/2021 动态数组公式
利用TEXTSPLIT拆分查找文本为单词,再通过SEARCH校验所有单词是否存在:
=XLOOKUP(TRUE,BYROW(A:A,LAMBDA(x,AND(ISNUMBER(SEARCH(TEXTSPLIT(B2," "),x))))),A:A,"未找到")
- 逻辑:
TEXTSPLIT(B2," ")将查找文本按空格拆分为单个单词;BYROW遍历A列每个单元格,用AND(ISNUMBER(SEARCH(...)))判断所有单词是否都在当前单元格中;XLOOKUP返回第一个符合条件的员工姓名。
方案2:兼容旧版Excel的数组公式
如果你的Excel版本不支持动态数组,使用以下数组公式(输入后按Ctrl+Shift+Enter确认):
=INDEX(A:A,MATCH(1,MMULT(--ISNUMBER(SEARCH(TRIM(MID(SUBSTITUTE(B2," ",REPT(" ",99)),(ROW(INDIRECT("1:"&LEN(B2)-LEN(SUBSTITUTE(B2," ",""))+1))-1)*99+1,99)),A:A)),ROW(INDIRECT("1:"&LEN(B2)-LEN(SUBSTITUTE(B2," ",""))+1))),0),0)
- 逻辑:通过字符串拆分技巧将查找文本拆分为单词列表,
MMULT计算每行匹配的单词数量,MATCH定位第一个所有单词都匹配的行,最终用INDEX返回对应姓名。
注意事项
- 区分大小写匹配:将公式中的
SEARCH替换为FIND即可。 - 优化性能:将公式中的
A:A替换为具体单元格区域(如A2:A100),避免遍历整列。 - 多结果返回:若需要返回所有匹配项,Excel 365可使用
FILTER函数:=FILTER(A:A,BYROW(A:A,LAMBDA(x,AND(ISNUMBER(SEARCH(TEXTSPLIT(B2," "),x))))),"未找到")
内容的提问来源于stack exchange,提问作者Daniel Kimani
相关产品推荐
相关产品推荐

