如何匹配Sheet1与Sheet2中的单元格对并返回1或0?
匹配单元格对存在性的正确Excel公式实现
需求:判断Sheet2中每行的A、B单元格对是否在Sheet1的A:B数据区域中存在,存在返回1,不存在返回0。
原公式问题分析
- 公式
=NOT(ISERROR(FIND(TEXTJOIN("|",FALSE,A1:B1),TEXTJOIN("|",FALSE,Sheet1!$A$1:$B$5)))):将所有单元格拼接成单一字符串后匹配,会出现误判。例如Sheet1中有"Apple|Banana",Sheet2中有"App|leBanana",FIND会错误识别为匹配,导致结果不准确。 - 公式
=IF(COUNTIF(Sheet1!$A$1:$B$5,A1),1,0):仅能匹配单个单元格值,无法同时验证A、B单元格组成的配对,不符合需求。
正确实现方法
方法1:COUNTIFS函数(推荐,支持Excel 2007及以上)
直接通过多条件计数判断单元格对是否存在:
=IF(COUNTIFS(Sheet1!$A:$A, A1, Sheet1!$B:$B, B1) > 0, 1, 0)
说明:COUNTIFS会统计Sheet1中A列等于当前行A1,且B列等于当前行B1的记录数,只要存在至少一条匹配记录,就返回1,否则返回0。
方法2:SUMPRODUCT函数(兼容旧版Excel)
如果使用不支持COUNTIFS的旧版Excel,可借助数组运算实现:
=IF(SUMPRODUCT((Sheet1!$A$1:$A$5=A1)*(Sheet1!$B$1:$B$5=B1))>0,1,0)
说明:(Sheet1!$A$1:$A$5=A1)和(Sheet1!$B$1:$B$5=B1)会生成布尔值数组,相乘后只有当两个条件同时满足时结果为1,SUMPRODUCT求和后大于0则说明存在匹配的单元格对。
方法3:XLOOKUP函数(Office 365/Excel 2021及以上)
利用XLOOKUP的多条件匹配能力:
=IF(NOT(ISERROR(XLOOKUP(1,(Sheet1!$A:$A=A1)*(Sheet1!$B:$B=B1),Sheet1!$A:$A))),1,0)
说明:通过(Sheet1!$A:$A=A1)*(Sheet1!$B:$B=B1)构建匹配条件,XLOOKUP找到符合条件的记录则返回对应值,找不到则返回错误,通过ISERROR判断后返回1或0。
内容的提问来源于stack exchange,提问作者Manolete
相关产品推荐
相关产品推荐

