用法:
=REDUCE(初始值,数组,函数)
通过将LAMBDA函数应用到每个值并返回累加器中的总值,将数组减小为累计值。
案例一:计算平方和
公式:
=REDUCE(0,A1:A7,LAMBDA(x,y,x+y^2))
解析:
第一参数0为初始值,对应LAMBDA函数中的x;
第二参数A1:A7为遍历的数组,对应LAMBDA函数中的y;
LAMBDA函数定义REDUCE第一参数为x,第二参数为y,x+y^2为计算表达式。
表示每次进行平方计算后与初始值进行累加,并且每次计算的结果作为下一步计算的初始值,直到第二参数数组中的每个值遍历完成。
第一步:
x+y^2
=0+20^2=400
第二步:
=400+30^2=1300
第三步:
=1300+40^2=2900
......
最后一步:
=13900+80^2=20300
公式等同于:
=SUM(A1:A7^2)
案例二:字符逆转
公式:
=REDUCE(,A1:A4,LAMBDA(x,y,y&x))
解析:
第一参数省略,第二参数为遍历的数组,计算过程:第一参数省略,y的第一个值“学”直接传递不计算,作为第二步的x;接着y的第二个值“无”传递到计算表达式y&x,得到结果“无学”;这样每次传递的值累加到上一步结果的前面,实现字符逆转的效果。
案例三:计算销售总额
公式:
=REDUCE(0,A2:A10,LAMBDA(x,y,x+y*OFFSET(y,,1)))
解析:
计算表达式为x+y*OFFSET(y,,1),第一次传入x=0,y=20,OFFSET(y,,1)为y向右偏移一列的值80,即0+20*80;第二次x=160,y=30,OFFSET(y,,1)=81,这样依次遍历A2:A10完成计算,返回最终的结果45960。
公式等同于:
=SUM(A2:A10*B2:B10)
案例四:转换分组
公式:
=REDUCE(A2:B2,A3:A5,LAMBDA(X,Y,VSTACK(X,IFNA(HSTACK(Y,TEXTSPLIT(OFFSET(Y,,1),,"、")),Y))))
解析:
A2:B2为初始值,A3:A5为遍历的数组,TEXTSPLIT将传入的名单拆分后,HSTACK将其与A列部门名称合并为新的数组,最后VSTACK将数组垂直堆砌起来。