栏目分类

你的位置:盛煌娱乐 > 关于盛煌娱乐 >

关于盛煌娱乐

Excel中REDUCE与LAMBDA函数由浅入深地学习与应用

目录

一、前言

二、官方介绍

三、低阶玩法

        3.1 应用一:LAMBDA的公式应用

        3.2 应用二:传统公式创建九九乘法表

        3.3 应用二:LAMBDA创建九九乘法表

四、中阶玩法

        4.1 应用三:拆分工资条

        4.2 应用四:批量替换

五、高阶玩法

        5.1 筛选不重复值

        5.2 生成前x个数中的素数

        5.3 数学循环公式计算

六、后记

一、前言

REDUCE与LAMBDA都是Excel中的高阶函数,在Microsoft 365中得到支持。

LAMBDA函数的出现是划时代的,他的出现标志着EXCEL的学习方向从公式思维转变为编程思维来解决数据问题,而REDUCE函数的迭代计算配合LAMBDA函数使得Excel无所不能。

知识源于经验,但绝不来源于经验

——康德《纯粹理性批判》

二、官方介绍

LAMBDA函数参见:

https://support.microsoft.com/zh-cn/office/lambda-函数-bd212d27-1cd1-4321-a34a-ccbf254b8b67

REDUCE函数参见:

https://support.microsoft.com/zh-cn/office/reduce-函数-42e39910-b345-45f3-84b8-0642b568b7cb

三、低阶玩法

排除掉VBA和PowerQuery等玩法,使用Excel处理数据本身就是公式的排列组合嵌套,因此低阶玩法就是两个函数分开单独使用。REDUCE函数需要搭配LAMBDA函数使用,所以低阶玩法中仅对LAMBDA做介绍。

在任一单元格中输入”=LAMBDA(x,y,x+y)(3,5)”,其结果为8,简单解释即定义”x”与”y”两个参数,然后创建一个”x+y”的函数,最后对x和y分别赋值为”3”和”5”,最后返回结果”8”。

图片

此时会有疑问:LAMBDA使用了看起来更加复杂的计算方法,得到的是和传统公式一样的结果,为什么要使用LAMBDA呢?在低阶应用时,LAMBDA确实不如传统公式简洁明了,但当一次性处理的数据多了的时候,请看应用二:创建一个九九乘法表

传统公式:输入”

=IF(ROW()>=COLUMN(),COLUMN()&"×"&ROW()&"="&ROW()*COLUMN(),"")

”,然后分别右拉下拉9格即完成。

缺点:修改显示位置麻烦;这只是9×9的表格,如果是9000×9000呢?一格一格拉吗?

图片

LAMBDA用法:输入”

=MAKEARRAY(9,9,LAMBDA(x,y,IF(x>=y,y&"×"&x&"="&x*y,"")))

”,直接回车完成。

公式解释:“先使用MAKEARRAY()函数创建一个9×9的数列,接着使用LAMBDA函数构造乘法公式,其中”x”和”y”的值分别为行和列,在MAKEARRAY中给出。

缺点:需要理解函数。

图片

此时LAMBDA函数对批量数据的处理能力已经初见端倪。

四、中阶玩法

中阶就需要REDUCE与LAMBDA进行嵌套使用了,可以简单解释为REDUCR(①,②,LAMBDA(x,y,⑤)),其中①是累加器的初始值,②是累加器的数组,REDUCE函数会在此数组上进行累加。⑤是构建的x关于y的函数。在嵌套使用中,y作为每一次循环中的自变量,在数组②中一步一步地前进,x作为每一次循环的结果,在y遍历完数组②之后输出。

最经典的应用莫过于对工资条的拆分了。

应用三:拆分工资条

输入”

=REDUCE("",A2:A10,LAMBDA(x,y,VSTACK(x,A1:E1,FILTER(A2:E10,A2:A10=y," "),IF(A1:E1>0," "))))

其中VSTACK函数在Office 365以后支持;FILTER函数在Excel 2019以后支持。

文字解释:累加值x的初始值为空,使用y遍历”A2:A10”数组得到每次循环的姓名,再使用FILTER函数根据姓名(每一次的y)筛选出对应的手机号、工资等(FILTER(A2:E10,A2:A10=y," "),也可以使用OFFSET取出每一行数值),接着使用VSTACK函数,把每一次循环中得到的数据都加上表头并组合(VSTACK(x,A1:E1,FILTER(*),IF(A1:E1>0," "))),其中IF(A1:E1>0," ")是为了在每一段循环后面加上空白行(也可以直接写””,在最后嵌套IFERROR/IFNA函数解决),最后使用DROP函数处理掉第一行。

图片

应用四:批量替换

在Excel中,我们通常使用REPLACE函数或SUBSTITUTE函数进行文本替换,但在实际操作中往往需要多层嵌套。维护十分不便。

输入”

=REDUCE(B2,$D$2:$D$11,LAMBDA(x,y,SUBSTITUTE(x,y,VLOOKUP(y,$D$2:$E$11,2,FALSE))))

使用高阶函数组合后,可有效避免多层嵌套问题,哪怕是1万个对应关系,也可以轻松解决。

图片

五、高阶玩法

熟练掌握中阶玩法后,高阶玩法无非就是一些高阶函数的嵌套使用和数学逻辑判定,如继续嵌套LET函数对变量命名使得后续维护(不一定)更加方便,这里不再赘述,只是列出一些现成整合好的函数可供参考

筛选不重复值,把P:P换成需要筛选的列即可(↓完整复制)

=LET(SCOPE,P:P,START,MIN(IF(SCOPE<>"",ROW(SCOPE),""))+1,COL,COLUMN(SCOPE),DROP(REDUCE("",SEQUENCE(MAX((SCOPE<>"")*(ROW(SCOPE)))-1,,START,1),LAMBDA(X,Y,LET(PRE,INDIRECT("R"&Y&"C"&COL,FALSE),IF(COUNTIF(OFFSET(INDIRECT("R"&START&"C"&COL,FALSE),,,Y-1),PRE)=1,VSTACK(X,PRE),X)))),1))&T(N("只需要把P:P换成需要筛选的列,即可筛选出来不重复值(office365版本),如果第一个数据不在第二行请修改START "))

生成前x个数中的素数(修改100为x,即可生成前x个数中的质数)=REDUCE(,SEQUENCE(100),LAMBDA(x,y,IF(COUNT(0/(MOD(y,SEQUENCE(y))=0))<3,VSTACK(x,y),x)))

图片

数学中的循环计算,例如下式:

图片

=LET(终止数,100,REDUCE(0,SORT(REDUCE(,SEQUENCE(终止数),LAMBDA(x,y,IF(COUNT(0/(MOD(y,SEQUENCE(y))=0))<3,VSTACK(x,y),x))),1,-1),LAMBDA(x,y,POWER(y+x,1/y)))-1)

图片

六、后记

限于水平,还有一些高阶函数相互嵌套例子未列出,此文仅抛砖引玉为此函数的应用作一些参考。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。