按唯一列标题统计数组每行至少一个TRUE的次数(每行最多计1次)
解决方法
问题分析
你需要统计每个列标题(a、b、c)对应的至少包含一个TRUE的行数,且每行同一列标题仅计1次。之前使用的SUMPRODUCT公式会直接求和所有匹配列标题的TRUE单元格数量,而非按行去重计数,因此结果不符合预期。
可行公式
针对每个变量(比如单元格A8为"a"),可以使用以下公式计算对应计数:
=SUMPRODUCT(--(MMULT(--($A$2:$G$2=A8),--($A$3:$G$5=TRUE))>0))
公式解释
--($A$2:$G$2=A8):将列标题行中等于当前变量的位置转为1,其余转为0,生成匹配标记数组。--($A$3:$G$5=TRUE):将数据区域的TRUE转为1,FALSE转为0,方便数值计算。MMULT(...):通过矩阵乘法,计算每行中当前变量对应的单元格里TRUE的总个数。>0:判断该行是否至少存在一个TRUE,得到TRUE/FALSE的判断数组。--:将判断结果转为1(TRUE)和0(FALSE),最后SUMPRODUCT求和就是符合条件的行数。
验证结果
- 变量a:前两行的a列均有TRUE,第三行无,结果为2,符合预期。
- 变量b:三行的b列都至少有一个TRUE,结果为3,符合预期。
- 变量c:仅第三行的c列有TRUE,结果为1,符合预期。
替代方案(适用于支持LAMBDA的Excel版本)
如果你的Excel版本支持LAMBDA函数,也可以用更直观的BYROW写法:
=SUMPRODUCT(--(BYROW($A$3:$G$5,LAMBDA(row,MAX(IF($A$2:$G$2=A8,row,FALSE))))=TRUE))
这个公式会逐行检查当前变量对应的单元格是否有TRUE,取每行的最大值(只要有一个TRUE就会返回TRUE),最后统计TRUE的行数。
内容的提问来源于stack exchange,提问作者Sponge
相关产品推荐
相关产品推荐

