如何在同一单元格中生成扩展范围的Running sum数组,无需逐个指定SUM范围?
嘿,这个需求太戳人了——手动写每个SUM的范围不仅麻烦,要是后续要加行数还得改公式,真心闹心!给你几个实用的简洁方案,适配不同Excel版本:
适合Excel 365/2021(支持动态数组)的最优解
直接用SCAN函数,这就是为累加场景量身定做的,一行搞定:=SCAN(0,D4:D6,LAMBDA(a,b,a+b))
原理超简单:初始值设为0,SCAN会挨个遍历D4:D6里的每个值,把当前值加到之前的累加结果上,自动生成完整的累加和数组,完全不用手动指定每个扩展范围。输入后直接返回{D4, D4+D5, D4+D5+D6}的结果,和你原来的CHOOSE输出完全一致,而且扩展性拉满——以后要加到D10,只要改D4:D6为D4:D10就行。适合旧版Excel(无动态数组)的数组公式方案
要是你还在使用不支持动态数组的老版本,用MMULT来实现:=MMULT(--(ROW(D4:D6)>=TRANSPOSE(ROW(D4:D6))),D4:D6)
这个公式需要按Ctrl+Shift+Enter作为数组公式输入(旧版Excel里必须这么操作,不然出不来正确结果)。它的逻辑是生成一个三角矩阵:行号大于等于转置后的行号时返回1,否则0,再用矩阵乘法和原数据相乘,最终得到每个位置的累加和。为啥你之前的
INDIRECT方案不行?
你之前试的INDIRECT("D4:D"&{4,5,6})只返回第一个值,是因为INDIRECT是易失函数,在数组上下文里它不会自动迭代每个数组元素,只会计算第一个参数对应的范围,所以才只得到SUM(D4:D4)的结果,这种场景下确实不适合用INDIRECT。
备注:内容来源于stack exchange,提问作者Sherman

