如何用Excel非数组/非VBA公式多条件过滤统计同类分组数量(排除Group=0)
解决方案
情况1:统计整个表格中同Element+Group且Group≠0的总记录数
如果你的需求是统计当前行对应的Element和Group组合(且Group≠0)在整个表格中的总数量,直接在原公式基础上给COUNTIFS添加Group≠0的条件即可:
=IF(C3=0, 0, COUNTIFS(B:B, B3, C:C, C3, C:C, "<>0"))
- 当当前行Group=0时,返回
0(也可改为""显示空值) - 非Group=0的行,用
COUNTIFS同时匹配Element、Group,且过滤掉Group=0的记录
情况2:统计当前连续块的行数(即连续相同Element+Group且Group≠0的行的数量)
如果你的需求是统计当前行所在的连续相同Element+Group块的行数(忽略Group=0的块),可以使用以下无需数组输入、支持手动向下填充的公式:
=IF(C3=0, 0, IF(AND(B3=B2, C3=C2), F2, XLOOKUP(TRUE, (B4:B$1000<>B3)+(C4:C$1000<>C3)+(C4:C$1000=0), ROW(B4:B$1000), ROW(B$1000)) - ROW(B3) + 1))
公式说明:
- 先判断当前行Group是否为0,是则返回
0 - 如果当前行和上一行的Element、Group完全相同,直接继承上一行的统计结果
- 如果是当前块的第一行,用
XLOOKUP查找下一个满足「Element不同」「Group不同」「Group=0」的行号,用该行号减去当前行号再加1,得到当前连续块的总行数
注意:公式中的
B$1000和C$1000请替换为你数据的实际最后一行行号
为什么你之前的FILTER公式没生效?
你之前在FILTER中添加C$3:C3 <> 0的逻辑是对的,但可能没结合对当前行Group的判断,或者FILTER的范围设置有问题。正确的累计统计到当前行的公式应该是:
=IF(C3=0, 0, COUNT(FILTER($B$3:B3, ($B$3:B3=B3)*($C$3:C3=C3)*($C$3:C3<>0))))
这个公式会统计从第3行到当前行的同Element、同Group且Group≠0的行数,手动向下填充即可生效。
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

