还记得曾经教过的递归函数吗?详情请参阅开了天眼了!Excel 这个新函数几乎包揽了所有计算功能 。
今天讲解另一对递归函数组合,跟上述函数不同的是,这个组合可以算出每个中间步骤的结果。
案例:根据下图 1 中右侧数据表的要求计算 A 列的各种累计值,要将每一步的累计结果全部列出来。
效果如下图 2 所示。


1. 在 C2 单元格中输入以下公式:
=SCAN(,A2:A7,LAMBDA(x,y,x+y))


公式释义:
scan 函数的作用是通过对每个值应用 LAMBDA 来扫描数组,并返回具有每个中间值的数组;
它跟 reduce 函数的区别是:reduce 返回最终计算结果,而 scan 可以将每一个中间步骤的结果都列出来;
语法为 SCAN([累加器的起始值],数组,lambda (累加器,数组中的当前值,应用于数组中每个元素的计算));
公式中第一个参数省略,表示将第一个元素当作起始值存在累加器中,不参与计算;第二次迭代的时候,用累加器的值与第二个元素相加;
第二个参数 A2:A7 为计算区域;
LAMBDA(x,y,x+y):x 为累加器;y 是当前元素,每次不断迭代;x+y 表示计算规则,将累加器的值加上当前元素,就是累计求和。
2. 在 D2 单元格中输入以下公式:
=SCAN(,A2:A7,LAMBDA(x,y,x-y))


公式释义:
公式与 C 列的公式原理一样,就不重复解释了,lambda 参数部分 (x,y,x-y) 是用累加器的值减去当前元素值。
3. 在 E2 单元格中输入以下公式:
=SCAN(,A2:A7,LAMBDA(x,y,x*y))


公式释义:
LAMBDA(x,y,x*y):lambda 的参数将累加器 x 与当前元素 y 相乘;
然后用 scan 函数列出每个当前元素的计算结果。
4. 在 F2 单元格中输入以下公式:
=SCAN(0,A2:A7,LAMBDA(x,y,x+y^2))


公式释义:
scan 函数的第一个参数设置为 0,就是将 0 作为累加器的初始值,第一个元素需要参与第一次计算;此处第一个元素是 1,所以结果恰巧跟留空的效果是一样的,但计算原理并不一样,实际工作中要根据计算需要调整第一个参数;
LAMBDA(x,y,x+y^2):x 是累计值;公式的第一个结果为 0+1^2=1,第二个结果为 1+2^2=5……依此类推。