You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ARRAYFORMULA计算中生成随行变化的动态范围?

解决ARRAYFORMULA中动态范围累积求和的问题

你需要实现的是累积求和(逐行计算从K2到当前行的总和),之前用ARRAY_CONSTRAIN和INDIRECT失败的核心原因是:这两个函数不支持在ARRAYFORMULA内逐行处理ROW()返回的数组值,只会取数组的第一个元素计算,无法生成动态变化的范围。

下面提供两种可行的解决方案:

方法1:用MMULT实现兼容旧版本的累积求和

适用于所有版本的Google Sheets,公式如下:

=ARRAYFORMULA(IF(K2:K="",,MMULT(N(ROW(K2:K)>=TRANSPOSE(ROW(K2:K))),K2:K)))

原理说明:

  • ROW(K2:K)>=TRANSPOSE(ROW(K2:K)) 生成一个布尔矩阵,矩阵中第i行第j列的元素为TRUE当且仅当i≥j(即当前行号大于等于目标行号)
  • N()函数将布尔值转换为1(TRUE)和0(FALSE),得到一个下三角全1的矩阵
  • MMULT()通过矩阵乘法,将这个矩阵与K列数值相乘,最终得到每一行的累积求和结果

方法2:用SCAN实现简洁的累积求和

Google Sheets新版本支持SCAN函数,写法更直观:

=ARRAYFORMULA(SCAN(0,K2:K,LAMBDA(a,v,a+v)))

原理说明:

  • SCAN是专门的扫描累加函数,第一个参数0是初始累加值
  • LAMBDA(a,v,a+v)定义累加规则:a是之前的累加结果,v是当前行的K列值,每次将两者相加并返回结果
  • 如果需要忽略空行(空行保留之前的累加值),可以调整为:
=ARRAYFORMULA(SCAN(0,K2:K,LAMBDA(a,v,IF(v="",a,a+v))))

验证示例

当K2:K9的数值为2 6 4 8 5 4 2 3时,上述两个公式都会返回你期望的结果:

2
8
12
20
25
29
31
34

内容的提问来源于stack exchange,提问作者Jgon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:24:55