ARRAYFORMULA中ROW函数失效:计算每行G-Z列“P”的数量
解决谷歌表格中逐行统计指定列"P"数量的问题
原公式的问题
你当前使用的公式无法正常工作,核心原因是:INDIRECT函数不支持数组迭代运算——它无法接收ROW(B:B)生成的行号数组,逐个解析为对应的行范围(比如G2:Z2、G3:Z3...),因此无法实现逐行统计的需求。
两种可行的替代方案
方案1:使用BYROW(推荐,新版谷歌表格支持)
BYROW可以直接对每行进行迭代处理,语法更直观:
=BYROW(A:A, LAMBDA(r, IF(ROW(r)=1, "P", IF(r="", "", COUNTIF(OFFSET(G1,ROW(r)-1,0,1,20), "P")))))
- 逻辑:遍历A列的每一行
r,第一行返回表头"P";若A列单元格为空则返回空;否则用OFFSET定位当前行的G-Z列(20列宽度),统计其中"P"的数量。
方案2:使用ARRAYFORMULA+MMULT(兼容旧版)
通过数组运算实现逐行求和,无需迭代函数:
=ARRAYFORMULA(IF(ROW(A:A)=1, "P", IF(A:A="", "", MMULT(--(G:Z="P"), SEQUENCE(20,1,1,0)))))
- 逻辑:
--(G:Z="P"):将G-Z列中等于"P"的单元格转为1,其余转为0,生成一个二维数组;MMULT(..., SEQUENCE(20,1,1,0)):用矩阵乘法对每行的0/1值求和,得到每行"P"的总数;- 外层
IF处理表头和空行的显示逻辑。
内容的提问来源于stack exchange,提问作者DuckMasterAl
相关产品推荐
相关产品推荐

