大数跨境
0
0

Reduce()函数:再来一个分析的实际案例

Reduce()函数:再来一个分析的实际案例 Excel Plus---不止是Excel
2025-10-28
0
上篇文章当中关于reduce()函数的介绍,为了理解的方便,首先是选取了比较简单的案例(基本上不用套用其他的函数),主要是了解其运算的过程,但实际过程中,要解决问题,不可避免地要嵌套多个其他函数,刚好有一个案例,特此分享一下,重点了解其思维过程。
如下面截图所示,上部分的格式,要转化为下部分的格式。如果姓名所在行对应着"a",则将其对应的第1行的数字写下来,如果有多个,则按照从左到右的顺序排列到一行:
要达到上述目的,如果是用间接的方法(要把公式往下拖),公式可以写的很简单,比如下面两种方法:
方法1:

=LET(a,IF(B2:M2<>"",$B$1:$M$1,""),FILTER(a,a<>""))

方法2:

=TOROW(IF(B2:M2<>"",$B$1:$M$1,N),3)

以上两种方法虽然不同,但是主体基本上是一样的,就是:IF(B2:M2<>"",$B$1:$M$1,N)
是否可以一个公式整表输出?就是按下公式之后,不用往下拖,也不用提前将姓名复制上去,当然是有,而且不止一种,以下只是其中的一个办法,用的还是上述的思路:
首先,将A2:A5定义为变量y,作为要遍历的区域,以第一个值单元格A2为列,现在要得到单元格区域B2:M2, 这时候可以使用偏移函数。OFFSET(y,,1,,12), 它表示以单元格A2为基点,向下偏移0,向右偏移1个单元格,高度不变,宽度为12。
下一步,将B2:M2进行判断,如果不等于空,再取对应的B1:M1的值,否则为N(显示为错误值,后面用TOCOL函数剔除),那公式就是:

IF(OFFSET(y,,1,,12)<>"",$B$1:$M$1,N)


这一步跟上面两种方法的思路一样,公式也略长,现略写为大写的M。

下一步就是剔除错误错了,TOROW(M,3)


接下来就是要把姓名和上一步的结果进行横向接连,那么公式就是:

HSTACK(y,TOROW(M,3))

以上只是遍历单元格A2时的运算,然后要将每一步遍历运算的结果进行纵向拼接,公式就是:

VSTACK(x,HSTACK(y,TOROW(M,3)))


整个公式就是:

=LET(a,

REDUCE("",A2:A5,LAMBDA(x,y,VSTACK(x,HSTACK(y,TOROW(M,3))))),

IFERROR(DROP(a,1),""))

最后面加了DROP是因为要把第一行去掉(累加器的起始值为空),加IFERROR是要把错误值用空值代替。将M代替关键的公式之后,上述公式的整体结构还是比较清楚的。完整的公式就是:

=LET(a,

REDUCE("",A2:A5,LAMBDA(x,y,

VSTACK(x,HSTACK(y,TOROW(IF(OFFSET(y,,1,,12)<>"",$B$1:$M$1,N),3))))),

IFERROR(DROP(a,1),""))






【声明】内容源于网络
0
0
Excel Plus---不止是Excel
分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
内容 44
粉丝 0
Excel Plus---不止是Excel 分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
总阅读68
粉丝0
内容44