二维码 购物车
部落窝在线教育欢迎您!

如何理解和使用REDUCE函数?

 

作者:小窝来源:部落窝教育发布时间:2024-03-12 17:37:06点击:1465

分享到:
0
收藏    收藏人气:0人
版权说明: 原创作品,禁止转载。
编按:

REDUCE函数是Excel 365中的函数,它自带累加器功能。如何理解REDUCE的累加或累计功能呢?如何运用REDUCE函数呢?下面小窝为大家详细介绍。

 

今天小窝为大家介绍REDUCE函数。

REDUCE函数是LAMBDA函数的伴侣函数之一,内含累加器,可以实现迭代累加。当前,需要Excel 365版本才能使用。

1.作用与语法

REDUCE函数可以将初始值和数组代入LAMBDA函数中进行运算并累加。

=REDUCE(初始值,数组,LAMBDA(参数1,参数2,计算式)

初始值,就是累加器的起始值。

数组,需要参与运算的数组。

参数1和参数2,就是运算的两个变量。具体运算时,参数1代表初始值及每次运算的结果值,参数2将逐个引用数组中的每个值。

计算式,含两个参数的计算表达式。

2.基本用法理解

通过两个小实例,大家可以理解REDUCE函数的累加运算过程。

REDUCE的初始值指定有两种方式,一种是给出具体的初始值,如01””(空),以及单元格引用等,一种是省略。小窝带大家分别看看。

1)给出具体的初始值

求下方数据的乘积:

 

表格
描述已自动生成

 

忘掉PRODUCT函数,假装自己只知道一个一个单元格的相乘:

 

表格
描述已自动生成

 

设初始累加值X1,相乘的数组为Y,逐个相乘的过程可以分解为:

 

表格
描述已自动生成

 

注意看,X只在第一次运算的时候代表初始值,其他时候代表上次运算的结果值(实现了累加)。而Y则逐次从数组中从左到右从上到下取

REDUCE函数按照上面的过程进行运算,公式写成:

=REDUCE(1,B2:E3,LAMBDA(X,Y,X*Y))

 



 

初始值,对应LAMBDAX参数;数组,对应LAMBDAY参数;用初始值乘以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

IMG_256

相关推荐:

LAMBDA函数递归运算

用数组运算搞定按指定次数复制数据

用PQ按指定次数复制数据

提取数字和字母的万能公式

版权申明:

本文作者小窝;部落窝教育享有稿件专有使用权。若需转载请联系部落窝教育。