如何用ARRAYFORMULA实现A列非空时自动求和对应行数据
Google Sheets 逐行求和(仅A列有日期时)
你的公式=ARRAYFORMULA(IF(A2 = "", "", SUM(C2:2)))失效的原因是:SUM(C2:2)会直接计算整行的总和,无法配合ARRAYFORMULA实现逐行迭代计算。以下是两种可行的解决方案:
方法1:BYROW函数(新版Google Sheets适用)
将公式输入到B2单元格,自动遍历所有行:
=BYROW(A2:A, LAMBDA(row, IF(ISBLANK(row), "", SUM(INDIRECT("C"&ROW(row)&":"&ROW(row))))))
- 逻辑:遍历A列每一行,若A列单元格非空,则对该行从C列到末尾的所有单元格求和;若为空则返回空值。
- 优势:写法直观,支持动态列数(不管数值列有多少,都会自动覆盖)。
如果想限定数值列范围(比如只到Z列),可以改用:
=BYROW(A2:A, LAMBDA(row, IF(ISBLANK(row), "", SUM(OFFSET(row, 0, 2, 1, COLUMNS(C:Z))))))
方法2:MMULT函数(兼容旧版Sheets)
如果你的Sheets版本不支持BYROW,用这个公式输入到B2单元格:
=ARRAYFORMULA(IF(A2:A="","",MMULT(N(C2:Z), TRANSPOSE(COLUMN(C2:Z)^0))))
- 逻辑:通过矩阵乘法实现逐行求和,
N(C2:Z)将空值转为0,TRANSPOSE(COLUMN(C2:Z)^0)生成全1数组,两者相乘后求和得到每行的总数。 - 注意:如果数值列超过Z列,把公式里的
C2:Z替换成更大的范围(比如C2:ZZ)。
示例效果
应用公式后,你的表格会变成:
| 日期 | 总计 | col1 | col2 |
|---|---|---|---|
| 03/02/2025 | 249 | 15 | 234 |
| 02/02/2025 | 27 | 5 | 22 |
| 01/02/2025 | 26 | 23 | 3 |
| 31/01/2025 | 234 | 234 |
内容的提问来源于stack exchange,提问作者David Alsh
相关产品推荐
相关产品推荐

