Excel对比指定列查找同手机号同日期重复行并返回匹配行号
错误原因说明
你之前的公式存在两个核心问题:一是AND函数内的两个MATCH参数缺少逗号分隔,二是MATCH只能返回单个维度第一个匹配的相对位置,无法同时校验手机号+日期两个条件,也不能精准返回匹配行的实际行号。
实现方案
方案1:Excel 365 / 2021及以上版本(支持动态数组)
直接在新增列第2行输入以下公式,下拉即可自动匹配所有行:
=IFERROR(TEXTJOIN(",",TRUE,FILTER(ROW($E$2:$E$4761),(ROW($E$2:$E$4761)<>ROW())*($E$2:$E$4761=E2)*($I$2:$I$4761=I2),0)),0)
- 公式说明:
- 自动过滤出和当前行手机号、日期完全一致,且排除自身的所有行
- 存在多个重复行时会用逗号拼接所有匹配的工作表行号,无匹配则返回0
- 可将
$E$2:$E$4761替换为你实际的数据行范围
- 如果只需要返回第一个匹配的行号,可简化为:
=XLOOKUP(1,($E$2:$E$4761=E2)*($I$2:$I$4761=I2)*(ROW($E$2:$E$4761)<>ROW()),ROW($E$2:$E$4761),0)
方案2:旧版Excel(不支持动态数组)
使用数组公式,输入完成后需按Ctrl+Shift+Enter三键组合确认生效,再下拉填充:
=IFERROR(INDEX(ROW($E$2:$E$4761),SMALL(IF(($E$2:$E$4761=E2)*($I$2:$I$4761=I2)*(ROW($E$2:$E$4761)<>ROW()),ROW($E$2:$E$4761)-ROW($E$1),99999),1)),0)
该公式默认返回第一个匹配的重复行行号,无匹配返回0。
注意事项
- 所有范围引用需保留
$绝对引用符,避免下拉公式时范围偏移 - 若I列日期带时分秒格式,需将公式中
I2和$I$2:$I$4761替换为INT(I2)和INT($I$2:$I$4761),先转成纯日期再匹配 - 如果需要返回数据在列表内的序号(比如第一行数据返回1而非工作表行号2),将公式中
ROW($E$2:$E$4761)整体减去1即可
内容的提问来源于stack exchange,提问作者ZedZerg
相关产品推荐
相关产品推荐

