Excel中的编程式函数,真的太牛叉了!

教育   教育   2024-07-14 21:19   上海  
前天用REDUCE函数解决了一个多表汇总计算的问题(不同表中每列的字段名不一定相同),这个问题我第一次是用VBA代码解决的,最后用函数公式也解决了,这让我领略到了目前Excel中几个新函数的威力,于是又继续研究了下。
自从Excel中加入了LET函数,允许用户自定义函数的参数以后,写函数公式就逐渐有点编程的意思了,后来Excel中又加入了LAMBDA函数,拥有了通过函数来自定义新函数的能力,从此以后,Excel中的函数已经不是以前那个函数了,就像单车变摩托一样有了质的飞跃。
今天分享两个案例,大家可以感受下这些函数的魅力:
1、用REDUCE汇总格式相同的各个分表
用VSTACK函数可以直接把各个表中的数据区域垂直堆叠在一起,但是如果有12个表或者甚至更多表,这个公式写起来和直接复制粘贴汇总各个表就没有什么区别了。
这时候REDUCE函数就派上大用场了。
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函数的参数,即遍历的同时会累积。
2、MAP函数(遍历但不累积)
这个函数在JSA编程中也常用到,它可以遍历数组中的每个元素并按照指定的计算规则计算结果,形成的数组和原数组具有映射关系:
如上,写一个自定义函数LAMBDA(a,a+10),就一个参数a,给定一个a,这个函数就可以得到a+10的结果。可这只是针对一个单元格计算,如果想一次性算出D1:D7中的数字加10,就可以用MAP函数,给定要计算的区域,给定计算规则,MAP就会遍历该区域中所有单元格并依次计算最终形成新的结果。
基本原理如上,下面来个实战案例:
左边的数据统计为右边的数据。
F列、H列的数据都好统计,数据透视或简单的公式都行。
是中间这部分该如何得到呢?
我们先要得到店铺D001的销售平台有哪些?
用UNIQUE和FILTER函数可以得到。
然后再得到这个店铺这两个平台出现的次数,求一个平台出现的次数可以用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


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