Excel中的编程式函数,真的太牛叉了!
教育
教育
2024-07-14 21:19
上海
前天用REDUCE函数解决了一个多表汇总计算的问题(不同表中每列的字段名不一定相同),这个问题我第一次是用VBA代码解决的,最后用函数公式也解决了,这让我领略到了目前Excel中几个新函数的威力,于是又继续研究了下。自从Excel中加入了LET函数,允许用户自定义函数的参数以后,写函数公式就逐渐有点编程的意思了,后来Excel中又加入了LAMBDA函数,拥有了通过函数来自定义新函数的能力,从此以后,Excel中的函数已经不是以前那个函数了,就像单车变摩托一样有了质的飞跃。用VSTACK函数可以直接把各个表中的数据区域垂直堆叠在一起,但是如果有12个表或者甚至更多表,这个公式写起来和直接复制粘贴汇总各个表就没有什么区别了。A1中的公式:
=REDUCE('1月'!A1:D1,ROW(1:5)&"月",LAMBDA(x,y,VSTACK(x,INDIRECT(y&"!a2:d11"))))用REDUCE遍历数组{"1月";"2月";"3月";"4月";"5月"},遍历的同时用VSTACK函数对应月份表中的数据区域,遍历完成后就可以得到汇总的结果。
REDUCE是个递归函数,每次遍历后都会把得到的值传递给下次遍历时LAMBDA函数的参数,即遍历的同时会累积。
这个函数在JSA编程中也常用到,它可以遍历数组中的每个元素并按照指定的计算规则计算结果,形成的数组和原数组具有映射关系:
如上,写一个自定义函数LAMBDA(a,a+10),就一个参数a,给定一个a,这个函数就可以得到a+10的结果。可这只是针对一个单元格计算,如果想一次性算出D1:D7中的数字加10,就可以用MAP函数,给定要计算的区域,给定计算规则,MAP就会遍历该区域中所有单元格并依次计算最终形成新的结果。
F列、H列的数据都好统计,数据透视或简单的公式都行。
然后再得到这个店铺这两个平台出现的次数,求一个平台出现的次数可以用COUNTIFS,现在是求一个数组中每个平台出现的次数,这时就可以用MAP函数遍历。
公式如下:
=LET(a,UNIQUE(FILTER($B$2:$B$30,$A$2:$A$30=F2)),MAP(a,COUNTIFS($A$2:$A$30,F2,$B$2:$B$30,a),LAMBDA(x,y,x&"x"&y)))1、LET(参数a,a为店铺D001对应的两个平台,计算公式)即2、计算公式为:
MAP(其中一个数组为a,另一个数组为该店铺两个平台对应的出现次数,由LAMBDA定义的计算过程即两个数组中对应位置的元素用“x”相互连接。以上案例中想要的整个统计结果可以用一个公式全部搞定,但是其实没必要,公式能简单则简单,不用搞得那么长。LAMBDA函数的应用说简单也简单,说复杂也复杂,还是得具备点数组公式的基础才能将其应用得更加灵活。
本案例的素材链接:
https://pan.quark.cn/s/71d171ce0a3b
1、我录制的所有视频教程都可以免费学习,每门教程都有对应的素材,视频学习永久有效,视频学习中遇到的疑问可以直接找我答疑。
2、除了视频中遇到的问题之外,工作中遇到的问题也可以找我答疑(主要答疑Excel方面的问题)。
3、会员群里不定期会用腾讯会议开直播,根据大家的需求讲解一些实际工作中遇到的问题的解决方案、一些数据处理流程的优化等。
4、我百度网盘中一些常用的软件及学习资料都可以分享给您,包括各版本的Office,政企版WPS,WPS中的VBA插件,以及一些常用的软件等,即我网盘里的所有资源都可以共享给你。
5、终身会员可以分销我的课程,有提成的!
终身会员群只招收100名学员,XF:999,需要的朋友请加V:527240310