优化多条件SUMPRODUCT公式:实现唯一标识符去重计数
解决Excel多条件下唯一标识符去重计数的问题
你需要的是统计满足指定多条件的唯一标识符数量——同一ID不管符合条件多少次都只算1次,原公式用SUMPRODUCT+COUNTIFS的问题在于,它会把每个符合条件的行都计数一次,没有对DATA!B:B的标识符做去重处理。下面给你两种适配不同Excel版本的优化方案:
方案1:Excel 365/2021(推荐,动态数组更简洁)
利用Excel的动态数组函数FILTER+UNIQUE,先筛选出符合条件的标识符,再去重后统计数量:
=COUNTA(UNIQUE(FILTER(DATA!B:B, (DATA!D:D=F9)*(ISNUMBER(MATCH(DATA!D:D, {"01","09","B01","E-01","N-01","RB01","S01","ZX01","ZX02","ZX03"}, 0))))))
公式拆解:
ISNUMBER(MATCH(DATA!D:D, {"01",...}, 0)):检查D列的值是否在你指定的条件列表中,返回TRUE/FALSE(DATA!D:D=F9)*:同时满足D列等于单元格F9的条件(和你原公式的第一个条件对应)FILTER(DATA!B:B, ...):筛选出同时满足上述两个条件的B列标识符UNIQUE(...):对筛选后的标识符去重,保留唯一值COUNTA(...):统计去重后的唯一标识符数量
方案2:兼容旧版Excel(无动态数组函数)
如果你的Excel版本不支持动态数组(比如Excel 2019及更早),可以用SUMPRODUCT+MATCH组合实现去重计数:
=SUMPRODUCT( (DATA!D:D=F9)* (ISNUMBER(MATCH(DATA!D:D, {"01","09","B01","E-01","N-01","RB01","S01","ZX01","ZX02","ZX03"}, 0)))* (MATCH(DATA!B:B, DATA!B:B, 0)=ROW(DATA!B:B)-ROW(DATA!B1)+1) )
公式拆解:
- 前两个条件和方案1一致,筛选出符合多条件的行
MATCH(DATA!B:B, DATA!B:B, 0)=ROW(DATA!B:B)-ROW(DATA!B1)+1:判断当前行的B列标识符是否是第一次出现(MATCH返回该ID第一次出现的行号,等于当前行号时则为首次出现)SUMPRODUCT将所有TRUE转为1、FALSE转为0,相乘后求和,最终得到唯一标识符的数量
额外优化建议:
- 尽量避免整列引用(如
B:B、D:D),改成实际的数据范围(比如DATA!B2:B1000),能大幅提升公式运行速度 - 确保B列的标识符是统一的文本格式,避免因数字/文本格式不一致导致的匹配错误
内容的提问来源于stack exchange,提问作者Lidias




