结合ArrayFormula与COUNTIF按行统计指定分类列0值的方法
需求说明
- 基础目标:配合
ArrayFormula实现逐行批量统计指定范围内的0值数量,替代单格公式=COUNTIF($C6:$CD6,"0"),无需手动向下拖拽填充。 - 已有可复用逻辑:
- 固定列范围逐行统计0值的数组公式,通过
MMULT实现矩阵计算完成逐行计数:
=ArrayFormula(IF(ISBLANK($A6:$A),,INDEX(MMULT(1*(IF($CH6:$DA="", "×", $CH6:$DA)=0), SEQUENCE(COLUMNS($CH6:$DA), 1, 1, )))))- 按表头(第2行)值为
Alphabet筛选目标列,再逐行求和的数组公式,通过条件判断动态选中符合表头规则的列:
=ArrayFormula(IF(ISBLANK($A5:$A),,SUMIF(IF(($C$2:$CD$2)="Alphabet",ROW($C$5:$C)),ROW($C5:$CD),$C5:$CD))) - 固定列范围逐行统计0值的数组公式,通过
- 最终目标:融合上述两类逻辑,先筛选出表头为
Alphabet的目标列,再逐行统计这些列中的0值数量,支持数组自动批量计算全量行结果。
实现公式
将公式放在结果列与数据起始行对齐的单元格(例如数据从第6行开始,就放在结果列第6行),输入后会自动向下计算所有行的结果:
=ArrayFormula( IF( ISBLANK($A6:$A), , MMULT( 1*( ($C$2:$CD$2="Alphabet") *(IF($C6:$CD="", "×", $C6:$CD)=0) ), SEQUENCE(COLUMNS($C$2:$CD$2), 1, 1, 0) ) ) )
公式逻辑说明
- 外层
IF(ISBLANK($A6:$A),,...)和已有写法逻辑一致:A列对应行无内容时不返回计算结果,避免无数据行生成多余0值。 - 内层条件判断部分同时校验两个规则:一是当前列的表头值为
Alphabet,二是当前单元格值为0(提前把空单元格替换为×,避免空值被误判为0),两个条件同时满足时返回1,否则返回0,最终生成和数据范围尺寸一致的0/1矩阵。 MMULT部分将0/1矩阵与等长的全1列向量做矩阵乘法,等价于对每行的1值求和,直接得到每行符合筛选规则的列中0值的总数量,无需额外嵌套INDEX即可直接返回数组结果。
可选调整
如果你的数据范围中空单元格不需要排除、可以直接判定为非0值,可以把内层的IF($C6:$CD="", "×", $C6:$CD)=0简化为$C6:$CD=0,公式计算效率会更高。
内容的提问来源于stack exchange,提问作者Kamilah
相关产品推荐
相关产品推荐

