如何理解和使用REDUCE函数?
作者:小窝来源:部落窝教育发布时间:2024-03-12 17:37:06点击:1465
REDUCE函数是Excel 365中的函数,它自带累加器功能。如何理解REDUCE的累加或累计功能呢?如何运用REDUCE函数呢?下面小窝为大家详细介绍。
今天小窝为大家介绍REDUCE函数。
REDUCE函数是LAMBDA函数的伴侣函数之一,内含累加器,可以实现迭代累加。当前,需要Excel 365版本才能使用。
1.作用与语法
REDUCE函数可以将初始值和数组代入LAMBDA函数中进行运算并累加。
=REDUCE(初始值,数组,LAMBDA(参数1,参数2,计算式)
初始值,就是累加器的起始值。
数组,需要参与运算的数组。
参数1和参数2,就是运算的两个变量。具体运算时,参数1代表初始值及每次运算的结果值,参数2将逐个引用数组中的每个值。
计算式,含两个参数的计算表达式。
2.基本用法理解
通过两个小实例,大家可以理解REDUCE函数的累加运算过程。
REDUCE的初始值指定有两种方式,一种是给出具体的初始值,如0、1、””(空),以及单元格引用等,一种是省略。小窝带大家分别看看。
1)给出具体的初始值
求下方数据的乘积:
忘掉PRODUCT函数,假装自己只知道一个一个单元格的相乘:
设初始累加值X为1,相乘的数组为Y,逐个相乘的过程可以分解为:
注意看,X只在第一次运算的时候代表初始值,其他时候代表上次运算的结果值(实现了累加)。而Y则逐次从数组中从左到右从上到下取。
REDUCE函数按照上面的过程进行运算,公式写成:
=REDUCE(1,B2:E3,LAMBDA(X,Y,X*Y))
初始值,对应LAMBDA的X参数;数组,对应LAMBDA的Y参数;用初始值乘以Y中第一个数,其积被REDUCE累计作为下一次X初始值;然后取Y的第二个数与第二个初始值(也就是第一次的积)相乘……如此将Y中的数据都遍历一次,并将最后一次的积作为结果输出。
2)省略初始值
初始值也可以省略,省略的话,就表示直接将数组Y中的第一个值作为第一次运算的结果值(即第二次运算的初始值)。
这次不求乘积,而是求乘积算式,如下图。
用REDUCE函数,公式可以写成:
=REDUCE(,B17:E18,LAMBDA(x,y,x&"*"&y))
3.典型应用
1)反转字符串
小窝曾介绍用LAMBDA递归实现反转字符串。今天用REDUCE也可以。
=REDUCE("",MID(I3,SEQUENCE(LEN(I3)),1),LAMBDA(X,Y,Y&X))
说明:
MID(I3,SEQUENCE(LEN(I3)),1),将I3单元格中字符串拆分得到多行单字符数组,作为Y参数;然后取Y中第一个值“我”与初始值空值(””)进行连接,其连接结果作为第二次的初始值;再取Y中的第二个值“爱”,连接第二个初始值“我”,得到“爱我”作为第三次的初始值……以此类推完成反转。
2)批量替换字符
按替换表批量替换数据中的字符。
=REDUCE(I11,L11:L15,LAMBDA(x,y,SUBSTITUTE(x,y,OFFSET(y,0,1))))
3)按指定次数批量复制数据
按次数复制数据,小窝曾介绍过多种方式,有PQ法、辅助列加函数法、数组运算法等。今天,小窝用REDUCE函数搞定。
公式=REDUCE("数据",I19:I22,LAMBDA(X,Y,VSTACK(X,EXPAND(Y,OFFSET(Y,,1),,Y))))
说明:
将每个Y值代入EXPAND(Y,OFFSET(Y,,1),,Y)中得到复制后的数组,再用VSTACH将“数据”与它们在垂直方向连接起来。
4)制作工资条
我们曾分享过用操作法制作工资条,今天小窝告诉大家用纯函数法制作工资条。
公式=IFNA(REDUCE("",I42:I46,LAMBDA(x,y,VSTACK(x,I41:J41,FILTER(I42:J46,I42:I46=y),""))),"")
说明:
FILTER(I42:J46,I42:I46=y),逐个筛选等于第一个姓名、第二个姓名……的数据,然后用VSTACK命令,将其与工资表头、空行串在一起。由于初始值与VSTACK的第四个参数都是单列的空值,所以用VSTACK组合单列与多列数据时,必然会出现#N/A错误值。因此,最后用IFNA(当然也可用IFERROR)将错误值变成空值。
5)提取字母
提取字符串中所有字母,如果用其他函数,公式比较长,用REDUCE函数则比较简单。
公式=TRIM(REDUCE("",MID(I82,ROW($1:$56),1),LAMBDA(x,y,x&IF((y>="a")*(y<="z"),y," "))))
说明:
MID(I82,ROW($1:$56),1),将字符串拆分成多行单字符组成的数组;逐个判断该数组中的每个字符是否在A~Z中,是保留,不是变成空格;再用连接符&将它们与初始值串起来;最后用TRIM去掉多余的空格。
6)数据组合
在LAMBDA教程中,小窝分享了用递归实现数据的组合。现在我们用REDUCE来做数据组合。
公式可以写成=REDUCE(I54:I55,J54:K54,LAMBDA(x,y,TOCOL(x&TOROW(OFFSET(y,,,4),1))))
说明:
第一次运算,初始值是一列两行的数组,{“初”;”高”};Y取第一个值,即J54单元格。TOROW(OFFSET(y,,,4),1),将J54:J56变成一行三列{“一”,”二”,”三”}。(这里OFFSET中第4参数只所以写成4,是因为当前数据最大行数就是4。)x&TOROW(OFFSET(y,,,4),1),做两个数组的连接运算,得到一个两列三行的数组:
再用TOCOL将其变成一列六行的结果,该结果将是第二次运算的初始值:
第二次运算,Y取第二个值,即K54单元格。接着重复第一次的过程,这里就不截图了。
4.总结
REDUCE函数必须搭配LAMBDA函数使用,通过自身的累加器功能可以实现迭代运算。
函数中,初始值可以有,也可以省略;省略的话,就取数组的第一个值作为第一次运算结果。初始值可以是单个数据,也可以是数组(如最后一个实例)。初始值是累计变化的,第二次运算的初始值就是第一次运算的结果值。
函数中的数组将进行遍历,其每个值都会与初始值做一次运算。
本文配套的练习课件请添加客服微信buluowojiaoyu索取。
做Excel高手,快速提升工作效率,部落窝教育Excel精品好课任你选择!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
版权申明:
本文作者小窝;部落窝教育享有稿件专有使用权。若需转载请联系部落窝教育。