如何用COUNTIFS和SUMPRODUCT统计全列日期范围内的唯一文本数
解决Excel整列统计日期范围内唯一文本数量的问题
你遇到的问题核心是整列引用包含大量空单元格导致的:当用A:A和B:B时,COUNTIFS会计算所有空行的匹配数,这些空单元格的COUNTIFS结果会是一个极大的数值(比如几万甚至几十万),除以这么大的数后结果趋近于0,最终SUMPRODUCT的总和就变成了0。另外,整列计算的运算量也会非常大,拖慢Excel运行速度。
下面给你两种实用的解决方案,分别适配不同版本的Excel:
方案1:用动态数组函数(Excel 365/2021及以上推荐)
这个方法最简洁高效,直接用FILTER+UNIQUE+COUNTA组合,自动处理非空数据:
=COUNTA(UNIQUE(FILTER(B:B,(A:A>=E1)*(A:A<E2)*(B:B<>""))))
公式解释:
FILTER(B:B,(A:A>=E1)*(A:A<E2)*(B:B<>"")):筛选出A列在指定日期范围内,且B列不为空的所有项目文本。UNIQUE(...):从筛选结果中提取唯一的项目值。COUNTA(...):统计这些唯一值的数量(COUNTA会忽略空单元格,避免统计到无效的空值)。
方案2:兼容旧版Excel(2019及以前)
如果你的Excel不支持动态数组,可以用INDEX+COUNTA定义实际数据范围,替代整列引用,这样既避免空单元格干扰,又减少计算量:
=SUMPRODUCT( (($A$1:INDEX($A:$A,COUNTA($A:$A))>=$E1)*($A$1:INDEX($A:$A,COUNTA($A:$A))<$E2))/ COUNTIFS( $B$1:INDEX($B:$B,COUNTA($B:$B)), $B$1:INDEX($B:$B,COUNTA($B:$B)), $A$1:INDEX($A:$A,COUNTA($A:$A)), ">="&$E1, $A$1:INDEX($A:$A,COUNTA($A:$A)), "<"&$E2 ) )
公式解释:
$A$1:INDEX($A:$A,COUNTA($A:$A)):自动定位到A列最后一个有数据的行,只处理实际存在的数据,不会包含空行。B列同理。- 剩下的逻辑和你原来的公式一致,只是把整列替换成了动态的实际数据范围,这样COUNTIFS就不会计算大量空单元格,结果就能正常返回。
额外注意事项
- 确保A列的日期是真正的日期格式,如果是文本格式,日期比较会失效,可以用
DATEVALUE函数转换后再比较。 - 如果B列存在看似空的单元格(比如输入了空格或空文本
""),要在条件里加上(B:B<>"")排除这类无效值,避免统计错误。
内容的提问来源于stack exchange,提问作者chesschi




