如何用ArrayFormula实现B2:F2行的累积求和(含空值处理)
Google Sheets 用ArrayFormula实现横向累积求和(含空值处理)
要实现B3:F3区域和手动输入=SUM($B2:B2)、=SUM($B2:C2)...完全一致的横向累积求和效果,你之前的公式问题在于SUM在ArrayFormula中会对整个区域求和,而非逐列计算累积。下面提供两种可行方案:
方案1:用MMULT兼容旧版Sheets
=ArrayFormula(IF(B2:F2="","",MMULT(N(COLUMN(B2:F2)<=TRANSPOSE(COLUMN(B2:F2))),N(B2:F2))))
公式说明:
COLUMN(B2:F2)获取B到F列的列号数组(比如[2,3,4,5,6])COLUMN(B2:F2)<=TRANSPOSE(COLUMN(B2:F2))生成布尔矩阵,标记「当前列是否在目标列左侧或同一列」,转置后确保横向累积逻辑正确N()将布尔值转为1/0,让MMULT可以进行矩阵乘法运算MMULT()通过矩阵乘法,把1/0矩阵和数值行相乘,得到每列的累积和- 外层
IF判断原单元格为空时输出空值,避免显示无意义的0
方案2:用SCAN(新版Sheets推荐,更简洁)
如果你的Google Sheets支持LAMBDA函数(新版默认支持),可以用SCAN直接实现逐元素累积:
=ArrayFormula(IF(B2:F2="","",SCAN(0,B2:F2,LAMBDA(acc,val,acc+IF(val="",0,val)))))
公式说明:
SCAN(0,B2:F2,...)从初始值0开始,逐个遍历B2:F2的元素LAMBDA(acc,val,acc+IF(val="",0,val))定义累积规则:每次把当前值(空值则加0)加到之前的累积结果上- 外层
IF同步处理原单元格空值的场景,保持输出和原数据空值对应
内容的提问来源于stack exchange,提问作者Osm
相关产品推荐
相关产品推荐

