Excel多条件统计唯一值报错求助:统计符合条件的唯一姓名数
解决Excel中符合多条件的唯一姓名计数问题
首先,咱们先搞清楚你原来的公式为什么会报错:你的SUMPRODUCT(1/COUNTIFS(...))写法里,包含了不满足筛选条件的行,比如A在2016年的记录、D的2016年记录,这些行不满足年份或奖牌数的条件,导致COUNTIFS对它们返回0,触发了1/0的除法错误(#DIV/0!)。
针对你的需求——统计「奖牌数>2且<6,年份为2017或2018」的唯一姓名数量,这里给你两种适配不同Excel版本的解决方案,都适合大型数据集:
方案1:适配所有Excel版本(含旧版)的数组公式
这个方案用FREQUENCY来实现去重计数,不会出现除法错误,计算效率也不错:
=SUMPRODUCT(--(FREQUENCY(IF((B2:B9>2)*(B2:B9<6)*(C2:C9>=2017)*(C2:C9<=2018),MATCH(A2:A9,A2:A9,0)),ROW(A2:A9)-ROW(A2)+1)>0))
公式解析:
(B2:B9>2)*(B2:B9<6)*(C2:C9>=2017)*(C2:C9<=2018):用逻辑相乘的方式筛选出同时满足所有条件的行,返回一组TRUE/FALSE数组。IF(...,MATCH(A2:A9,A2:A9,0)):对满足条件的行,返回该姓名在A列首次出现的位置;不满足的行返回FALSE。FREQUENCY(...,ROW(A2:A9)-ROW(A2)+1):统计这些位置的出现频率,每个唯一姓名只会对应一个非零的频率值。--(FREQUENCY(...)>0):把频率大于0的结果转成1,否则转成0,最后用SUMPRODUCT求和得到唯一姓名的数量。
注意:如果是Excel 2019及更早版本,输入公式后需要按Ctrl+Shift+Enter作为数组公式确认。
方案2:适配Excel 365/2021及以上的动态数组公式
如果你用的是支持动态数组的Excel版本,这个公式更简洁直观,处理大型数据集的效率也更高:
=COUNTA(UNIQUE(FILTER(A2:A9,(B2:B9>2)*(B2:B9<6)*(C2:C9={2017,2018}))))
公式解析:
FILTER(A2:A9,...):直接筛选出满足所有条件的姓名列表。UNIQUE(...):对筛选后的姓名列表去重。COUNTA(...):统计去重后的姓名数量。
两种方案代入你的测试数据,都会返回预期的结果2(仅B和C符合条件)。
大型数据集优化建议:
- 尽量使用精确的单元格范围(比如A2:A10000),避免整列引用(A:A),减少不必要的计算量。
- 如果使用动态数组公式,确保你的Excel版本支持,否则会返回数组而非单个结果。
内容的提问来源于stack exchange,提问作者Sivakesav




