REDUCE,取代了我的VBA代码,牛!

教育   教育   2024-07-12 11:26   上海  

好久没有研究Excel中的新函数了,以至于遇到昨天文章中的多表汇总时用函数竟然解决不了,有点不甘心,查了下资料,看到这个REDUCE函数又有了新的思路。

其实REDUCE函数我最早在JSA中就接触过,只是在Excel中没用过这个函数,所以一时没想起来,看了下网上的案例,颇受启发,于是用到这个案例中,完美解决了此问题。

举个例子分享下:

以上是1月到3月的成绩表,每个表中C列到E列为各个科目的成绩,跟昨天的案例一样,各科成绩所在的列在每个表中的位置都不一样。
现在要求在总表中汇总每个人各个科目的总成绩,汇总中科目的顺序是A、B、C。
公式如下:

解释下这个公式怎么来的。
在Excel中REDUCE函数是和LAMBDA函数是组合使用的,所以想要搞清楚REDUCE函数的用法,首先得搞懂LAMBDA函数,这些都是Excel中的新函数,只要认真去琢磨下,很容易理解。
LAMBDA函数是专门用来自定义函数的,以前只能通过VBA自定义函数,现在通过LAMBDA函数就可以自定义函数,非常方便。
语法:=LAMBDA([parameter1, parameter2, …,] calculation) 
举个例子: 将华氏度转换为摄氏度            
=LAMBDA (temp, (5/9) * (Temp-32) )
以上就是自定义了一个将华氏度转换为摄氏度的函数,该函数有一个参数temp,它的计算逻辑是(5/9) * (Temp-32),在工作表中怎么使用这个函数呢?
B2单元格中输入=LAMBDA(temp,(5/9)*(temp-32))(A2)即可求出A2中华氏温度对应的摄氏温度。LAMBDA(temp,(5/9)*(temp-32)),这一段是自定义函数,只是我们没给它起个名字,如果起个名字为ToCelsius,
那公式就可以直接写成
这样就是很熟悉了吧,和我们平时用的内置函数用法是一样的。
了解了LAMBDA函数以后再来了解下REDUCE函数。
REDUCE函数是一个递归函数,通过将 LAMBDA 应用于每个值,并在累加器中返回总值,将数组减小为累积值。
举个例子就很容易明白了:
上图中我想求一班的人数,我先自定义一个函数
LAMBDA(a,b,IF(b="一班",a+1,a))
此函数有两个参数,a代表一个累计值,b代表我要判断的值,即上图中的班级,我们用这个函数可以判断一个值是否为“一班”,如果是,那么结果就是a+1,相当于累加,如果不是就是a,相当于不用累加。
我们写到工作表中看看:
如果你把a指定为0,b指定为单元格A2,那么该函数的结果就是1,这个逻辑很容易搞懂。
但现在并不是想判断一个单元格,而是想判断A2:A21区域中的每一个单元格,所以此时就需要REDUCE,它可以按照你自定义的函数的计算逻辑在指定的区域中遍历计算,并且每次计算完后都会把得到的值当作新的初始值代入到下次计算中去。
比如上例中
=REDUCE(0,A2:A21,LAMBDA(a,b,IF(b="一班",a+1,a)))
0是初始值,A2:A21是指定的区域,REDUCE函数会让LAMBDA(a,b,IF(b="一班",a+1,a))在A2:A21依次计算,第一次计算时相当于a=0,b等于A2,得到的结果为1,第二次计算时a就变为了第一次计算的结果即1,b会依次遍历A2:A21,变为了A3,……依次进行,直到把A2:A21遍历完毕。
以上便是REDUCE的计算原理。
明白此原理以后把REDUCE应用与文章开头提到的案例中,多表汇总案例。如果在一张表中汇总,其他函数就可以解决,完全用不着REDUCE。
首先我们想想在一张表中求某个姓名对应的某个科目的成绩怎么办?
用VLOOKUP配合MATCH即可,这个很简单。
现在我要去1月到3月每个表中依次求这个值并相加。首先我们自定义个函数,初始值x和表名构成的数组y,初始值为0,y为{"1月","2月","3月"},用于构成VLOOKUP和MATCH函数中需要的区域参数。
我们把x指定为1,y指定为“1月”,以上函数的运行时VLOOKUP第二参数的查找区域就是1月表中的B2:B21,MATCH的查找区域就是1月表中得到B1:E1。
所以现在只要让上述计算过程在1月到3月的表中依次遍历计算即可,C2中公式如下:=REDUCE(0,ROW($1:$3)&"月",LAMBDA(x,y,VLOOKUP($B2,INDIRECT(y&"!b2:e21"),MATCH(C$1,INDIRECT(y&"!b1:e1"),0),0)+x))
结果完美:
为了理解REDUCE函数的原理我还做了一些其它的案例,这里不介绍了,大家可以下载文件自己练习。

链接:
https://pan.quark.cn/s/2f264d9dbfca

终身会员权益介绍


1、我录制的所有视频教程都可以免费学习,每门教程都有对应的素材,视频学习永久有效,视频学习中遇到的疑问可以直接找我答疑。


2、除了视频中遇到的问题之外,工作中遇到的问题也可以找我答疑(主要答疑Excel方面的问题)。


3、会员群里不定期会用腾讯会议开直播,根据大家的需求讲解一些实际工作中遇到的问题的解决方案、一些数据处理流程的优化等。


4、我百度网盘中一些常用的软件及学习资料都可以分享给您,包括各版本的Office,政企版WPS,WPS中的VBA插件,以及一些常用的软件等,即我网盘里的所有资源都可以共享给你。


5、终身会员可以分销我的课程,有提成的!


终身会员群只招收100名学员,XF:999,需要的朋友请加V:527240310


米宏Office
轻松学习OFFICE技能,让工作更高效!
 最新文章