如何基于每行Low&High范围动态统计KeyNums列中KeyNms的出现次数?
我来帮你搞定这个Excel动态统计的需求!
首先明确你的核心需求:对每一行数据,以当前行的Low和High作为数值范围,统计KeyNums列里和当前行KeyNms相同、且数值落在该范围内的记录条数。你提到的CASE1用硬编码能得到正确结果,但没法适配每行的动态值;CASE2全返回TRUE,应该是公式里的引用或条件写法出了问题。
下面给你两种实用的解决方案,覆盖不同Excel版本:
方法一:用SUMPRODUCT(兼容所有Excel版本)
SUMPRODUCT可以直接处理数组运算,不用按Ctrl+Shift+Enter(旧版数组公式的繁琐操作)。假设你的数据列对应:
- KeyNms:A列
- KeyNums:B列
- Low:C列
- High:D列
- 统计结果放E列
在E2单元格输入公式:
=SUMPRODUCT((B:B>=C2)*(B:B<=D2)*(A:A=A2))
然后下拉填充到所有行就行。
公式解释:
(B:B>=C2):判断KeyNums列每个值是否≥当前行的Low,返回TRUE/FALSE(运算时自动转成1/0)(B:B<=D2):判断是否≤当前行的High(A:A=A2):判断KeyNms列每个值是否和当前行的KeyNms一致- SUMPRODUCT会把这三个数组对应位置相乘,再求和,最终得到同时满足三个条件的记录总数
方法二:用COUNTIFS(Excel 2007及以后版本)
COUNTIFS是专门的多条件计数函数,写法更直观:
=COUNTIFS(A:A,A2,B:B,">="&C2,B:B,"<="&D2)
同样下拉填充即可。
公式解释:
A:A,A2:第一个条件,KeyNms列等于当前行的KeyNmsB:B,">="&C2:第二个条件,KeyNums列≥当前行的Low(注意要把运算符和单元格用&连接,不能直接写">=C2")B:B,"<="&D2:第三个条件,KeyNums列≤当前行的High
为什么你的CASE2会失败?
大概率是这两个问题:
- 错误地用了绝对引用(比如
$C$2),导致所有行都引用第一行的Low/High值 - 运算符和单元格的连接错误,比如直接写
">=C2"(把C2当成文本了),这种写法会让所有数值都满足条件,最终返回TRUE,统计了全部行数
内容的提问来源于stack exchange,提问作者Phil_in_Tx
相关产品推荐
相关产品推荐

