求Excel函数:判断目录列单元格是否同时包含两个指定字符串
Excel函数实现书目双条件匹配并定位
核心解决逻辑
不能直接把姓名和标题塞到同一个SEARCH里(因为中间夹着日期等内容),得分别判断目录单元格是否包含姓名、是否包含标题,再找到同时满足两个条件的单元格位置。
分版本公式
适用于Excel 365/2021(动态数组版本)
假设:
- 完整目录列是
A1:A80000 - 当前行的姓名单元格是
C2(格式为「姓,名」) - 当前行的标题单元格是
D2
直接用这个公式返回匹配到的单元格地址,下拉即可批量计算:
=XLOOKUP(TRUE,ISNUMBER(SEARCH(C2,$A$1:$A$80000))*ISNUMBER(SEARCH(D2,$A$1:$A$80000)),ADDRESS(ROW($A$1:$A$80000),COLUMN($A$1:$A$80000)),"无匹配")
如果只需要行号,用这个更简洁:
=XLOOKUP(TRUE,ISNUMBER(SEARCH(C2,$A$1:$A$80000))*ISNUMBER(SEARCH(D2,$A$1:$A$80000)),ROW($A$1:$A$80000),"无匹配")
适用于旧版Excel(非365/2021)
需要按Ctrl+Shift+Enter作为数组公式输入,下拉批量应用:
=IFERROR(ADDRESS(MATCH(1,ISNUMBER(SEARCH(C2,$A$1:$A$80000))*ISNUMBER(SEARCH(D2,$A$1:$A$80000)),0),COLUMN($A$1:$A$80000)),"无匹配")
返回行号的版本:
=IFERROR(MATCH(1,ISNUMBER(SEARCH(C2,$A$1:$A$80000))*ISNUMBER(SEARCH(D2,$A$1:$A$80000)),0),"无匹配")
公式拆解
ISNUMBER(SEARCH(C2,$A$1:$A$80000)):遍历目录列,返回每个单元格是否包含姓名的逻辑值数组(TRUE=包含,FALSE=不包含)ISNUMBER(SEARCH(D2,$A$1:$A$80000)):同理返回是否包含标题的逻辑值数组- 两个数组相乘:逻辑值会自动转为1(TRUE)和0(FALSE),只有同时满足两个条件的位置会得到1,其余为0
XLOOKUP/MATCH找到第一个值为1的位置,ADDRESS把行号列号转换成单元格地址
优化建议
因为目录有8万行,建议不要用整列A:A,而是限定范围$A$1:$A$80000,能显著提升公式计算速度。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

