如何在Google Sheets中用arrayformula()实现动态累计求和?
动态累计求和的实现方法(无需拖拽公式)
你之前尝试的=ARRAYFORMULA(SUM($A$2:A))无效,是因为SUM是聚合函数,在ARRAYFORMULA中只会返回整个区域的总合计,无法生成逐行的累计序列。这里给你两种符合需求的动态实现方案:
方案1:用SCAN函数(简洁高效,Google Sheets新版本支持)
这是目前最直观的动态累计求和写法,自动适配A列新增的数据:
=ARRAYFORMULA(SCAN(0, A2:INDEX(A:A, COUNTA(A:A)), LAMBDA(acc, val, acc + val)))
SCAN函数从初始值0开始,遍历A2到A列最后一个非空单元格的区域LAMBDA(acc, val, acc + val)定义累加逻辑:每次把当前值val加到之前的累计值acc上INDEX(A:A, COUNTA(A:A))自动定位A列最后一行有内容的单元格,实现动态范围扩展
方案2:用MMULT函数(兼容旧版本Google Sheets)
如果你的表格版本不支持SCAN,可以用矩阵乘法实现:
=ARRAYFORMULA(IF(A2:A="", "", MMULT(--(ROW(A2:A) >= TRANSPOSE(ROW(A2:A))), A2:A)))
--(ROW(A2:A) >= TRANSPOSE(ROW(A2:A)))生成布尔矩阵,标记当前行及之前的所有行MMULT将这个矩阵和A列的值相乘,得到逐行的累计和IF(A2:A="", "", ...)过滤A列的空白行,避免出现不必要的0
这两个公式都不需要拖拽,当A列新增数据时,范围会自动扩展,和你用ARRAYFORMULA+VLOOKUP实现动态匹配的逻辑一致。
内容的提问来源于stack exchange,提问作者user3347814
相关产品推荐
相关产品推荐

