大家伙,今天我们要解决的问题是如何通过俩个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的行:
回车之后向右拖动,就能够得到指定客户的对账单了。
今天的分享就到此结束了,有什么不理解的可以打在评论区一起讨论一下。
如果对您有用的话,帮忙点个赞吧!