接上楼来说REDUCE函数的例子。
REDUCE第一参数也可以是数组,使用VSTAK函数可以将每次的初始值x和新生成的数组或单值纵向连接在一起:
- =REDUCE({1;1},ROW(5:13),LAMBDA(x,y,VSTACK(x,SUM(TAKE(x,-2)))))
复制代码
初始值设置为两行的数组{1;1},ROW(1:9)控制循环9次,每次循环SUM(TAKE(x,-2))将当前x的最后两行加总,然后用VSTAK(x,x最后两行加总结果)纵向堆叠起来。
再来一个传统题目,按指定次数重复数据:
- =REDUCE(,A107:A111,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,,1),,y))))
复制代码
上面的公式省略了第一参数,结果产生了错误,第一个元素A并没有参与运算重复次数。
设定初始值,例如0之后,会发现最后0是多余的,需要用DROP函数去掉第一行:
- =REDUCE(0,A107:A111,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,,1),,y))))
复制代码
既然这样,莫不如我们就给数据区域加上一个列标题“展开结果”,就不用去掉无用的第一行了(更多的时候这样生成的数组可以用HSTACK函数和原数据区域直接并在一起,行数就一样多了):
- =REDUCE("展开结果",A107:A111,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,,1),,y))))
复制代码
为A列每组数据进行组内连续编号,当数据不同时就是一个新组:
再来一个例子,将班级及获奖人员清单展开:
按衣服尺码规格拆分表格:
也可以用其他函数生成,例如:
REDUCE函数核心还在于循环,第二参数控制循环次数。
REDUCE函数在堆叠x和y运算形成的数组时,两个数组列数或行数不同,会出现错误值,用错误值屏蔽函数屏蔽即可。
REDUCE函数也可以实现SCAN函数循环的效果,把每个中间步骤和原来的x堆叠起来。
如果需要记录每步的结果可以考虑SCAN函数或REDUCE函数,如果只需要循环后的最终值,可以使用REDUCE函数。
REDUCE函数第二参数可以用SEQUENCE函数生成1、2、3……的序列,然后LAMBDA函数里顺序引用数组的第若干行若干列。
至此,Office 365最新一批函数的基本用法已经列示完毕,在实际应用中,新函数应用的场景非常多,用法非常灵活,再配合上老版函数的技巧,一定会极大提高每个人解决实际问题的能力。期待着大家提供更好的应用场景和示例,不断创造出新的套路和用法。
|