以前写了一个系列文章,《FILTER就是Excel针对计划员定制专属的函数》详细的介绍了FILTER函数的用法,最近有一个粉丝说,这个函数已经学会了,非常好用,有点美中不足的就是这个函数不能自动填充,每次数据更新后,都需要手动填充公式,问古老师能否创建一个不需要填充的公式,实现一键填充。
还是用一个经典的案例来说明一下两者的区别,先看数据,数据是一个一维数据,把每一个零件的工序详细的记录好了,现在需要把这一份数据转成二维的数据,目的就是让零件对应工序看起来更加直观。
手动填充的方法原来需要填充的方法步骤如下:
步骤1:把产品代码去重(垂直方向),录入公式:=DROP(UNIQUE(A:A),-1),并去除最后一行的“0”。
步骤2:水平方向,手工录入工序1、工序2、工序3
步骤3:把产品工艺用筛选函数筛选出来,并用转置函数转成水平方向,录入函数:=TOROW(FILTER(C:C,A:A=A2)),下拉填充,一个标准的二维报表就做好了。
这样的方法就虽然得到了想要的结果,但是,当源数据有更新的时候,还是需要把函数向下填充,才能更新数据,不是真正意义上的“一键”填充。
一键填充的思路要实现一键填充公式,传统的思路肯定不行了,因为如果用FILTER函数第二参数中的=TOROW(FILTER(C:C,A:A=A2)),等于A2这里不支持数组,也就是说只能等于一个单元格条件。
所以需要换成REDUCE LAMBDA的函数来解决这个问题。这两个函数解决了以前Excel无法“递归”的问题,整个步骤比较复杂,如需要用文字来详细解答这个函数的思路,确实有点难,所以只上步骤了。
步骤1:录入函数:E2=DROP(DROP(UNIQUE(A:A),-1),1),把A列的代码去重,并把标题和最后一位0去掉;
步骤2:
=REDUCE("",E2#,LAMBDA(X,Y,VSTACK(X,TOROW(FILTER(C:C,A:A=Y)))))
步骤3:需要把步骤2的错误和第一行去除,继续录入函数:
=IFNA(DROP(REDUCE("",E2#,LAMBDA(X,Y,VSTACK(X,TOROW(FILTER(C:C,A:A=Y))))),1),"")
可以看到,已经实现了一键填充了,最后需要的就是加上标题了