北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

不需要其他函数,FILTER函数自己嵌套自己就能实现一对多自动匹配

大家伙,今天我们要解决的问题是如何通过俩个FILTER函数的嵌套来实现一对多自动匹配?

如下图所示,要根据源数据表中的信息,根据客户姓名,自动匹配出来需要的客户对账单信息,但是得话呢,这里有一点不一样的地方是两个表的表头是不一样的,所以今天要用两个FILTER函数的嵌套来实现不连续列的自动匹配:

在目标单元格中输入公式:

=FILTER(FILTER($B$3:$H$15,R4=$B$2:$H$2),$C$3:$C$15=$U$2)

这个公式乍看起来比较乱,别担心,往下看,把逻辑搞清楚了就明白了。

回车之后向右拖拉,就可以得到该客户的对账单信息:

接下来对该公式进行详细的拆解:

=FILTER(FILTER($B$3:$H$15,R4=$B$2:$H$2),$C$3:$C$15=$U$2)

颜色标记部分为为内层FILTER函数作为了外层FILTER函数的第一参数。

该公式的整体目标是要从一个较大的数据范围(B3:H15)内,先根据内层FILTER函数进行第一次筛选过滤出中间结果,之后外层FILTER函数在对这个中间结果应用第二组条件进行最终筛选。

逐层解析:

内层FILTER函数进行第一次筛选:FILTER($B$3:$H$15,R4=$B$2:$H$2)

该公式的作用是从整个数据区域B3:H15中选出符合条件R4=$B$2:$H$2的结果,在目标单元格中输入该公式即可以得到如下结果:

可以看到将日期对应的这一列内容给提取了出来。

内层FILTER函数的具体参数说明:

数据源:$B$3:$H$15 这是要筛选的数据区域:

条件:R4=$B$2:$H$2

公式会对$B$2:$H$2范围内的每个单元格逐一进行判断,是否等于“日期”这个条件,此时就会出现一行的布尔值组合,如下图所示:

这个时候该组布尔值组合就会作为内层FILTER函数的第二参数,将第二参数抹黑按住F9,

抹黑前:

抹黑按住F9后:

FILTRE函数只会筛选逻辑值为TRUE的列,可以看到的是只有第一个是逻辑值TRUE,对应的就是第一列,这样就会把源数据表中的第一列给筛选出来了:

在这里有很多朋友可能就理解不了了,因为一般情况下筛选的都是行,很少有筛选列的,所以看起来会有点别扭,但是逻辑其实是一样的。如果说把表格转置过来,在用公式查找的话是不是就能看明白了:

本质上是一样的,只不过当查找的条件是行的时候,筛选出来的就是一行行的数据,当查找的条件是列的时候,筛选出来的就是一列列的数据。

同样的道理将公式向右拖拉,就可以快速的将对账单标题对应的信息给筛选出来:

此时内层FILTER函数的使命到此结束。再来看外层的FILTER函数:

=FILTER(FILTER($B$3:$H$15,R4=$B$2:$H$2),$C$3:$C$15=$U$2)

将内层的FILTER函数的结果作为外层FILTER函数的第一参数也就是筛选区域,外层FILTER函数的条件是以姓名为筛选条件 $C$3:$C$15=$U$2 ,此时$C$3:$C$15区域的每个单元格数据就会与$U$2这个单元格逐一比对,生成一个长度与源数据表长度相同的逻辑数组,如果比对成功就会显示逻辑值TRUE。

外层的FILTER函数就会根据该逻辑数组提取结果为TRUE的行:

回车之后向右拖动,就能够得到指定客户的对账单了。

今天的分享就到此结束了,有什么不理解的可以打在评论区一起讨论一下。

如果对您有用的话,帮忙点个赞吧!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言