Google Sheets中ArrayFormula能否递归引用自身计算结果?
解答
ArrayFormula 本身不支持直接自引用实现递归计算,直接在公式中引用上一行同列的计算结果会触发循环引用报错,无法正常运行。
你需要的「上一行输出结果参与下一行计算」的迭代逻辑,不需要依赖自引用,使用Google Sheets原生的SCAN累积数组函数即可实现,单个公式放在C1单元格就能自动适配动态增长的行数,适配实时数据源场景,不需要手动下拉填充,也不需要开启表格的迭代计算开关。
可用公式
根据你描述的规则:首行C1 = A1+B1,从第2行开始Cn = C(n-1) + Bn,对应公式如下:
=ARRAYFORMULA(IF(A:A="",,SCAN(A1+B1,ROW(A:A),LAMBDA(prev_res,cur_row,IF(cur_row=1,prev_res,prev_res+INDEX(B:B,cur_row))))))
公式逻辑说明
- 外层
IF(A:A="",,)用于过滤空行:当A列还没有实时数据写入时,对应行C列不会显示错误值或冗余内容,新行写入数据后会自动触发计算 SCAN函数专门用于逐行累积迭代计算:- 第一个参数
A1+B1是迭代的初始值,也就是C1的计算结果 - 第二个参数
ROW(A:A)表示遍历表格所有行 - 第三个参数为迭代逻辑:
prev_res代表上一行C列的计算结果,cur_row代表当前遍历到的行号;当前为第1行时直接返回初始值,从第2行开始,用上一行的计算结果加上当前行B列的数值,完全匹配你需要的迭代计算规则
- 第一个参数
- 该方案为原生数组计算,不会出现循环引用导致的计算错乱、性能下降问题,行数自动增加时会同步完成计算。
内容的提问来源于stack exchange,提问作者Richard Dennis Bartlett
相关产品推荐
相关产品推荐

