一对多查询,复杂问题变简单

发布于 2021-04-06 11:31

一对多查询,就是符合条件的有多个结果。通常使用数组公式来返回多个结果,由于比较复杂,是很多小伙伴的一块心病。

今天和大家分享一个比较简单的方法,来实现一对多的数据查询需要。
先看数据,是一份各部门的员工信息表,要根据G2单元格指定的部门,提取出所有财务部的人员信息。

步骤1
在D2单元格输入以下公式,向下拖动复制公式:
=(A2=G$2)+D1
(A2=G$2)部分,用A列的部门与G2单元格指定的部门进行对比,如果相同,返回逻辑值TRUE,否则返回逻辑值FALSE。
然后将逻辑值与前一个单元格中的数值相加。
在四则运算中,TRUE的作用相当于1,FALSE的作用相当于0。也就是如果部门条件符合了,D列的数值就增加1,否则还等于前一个数值。
注意观察,1、2、3、4……这些序号首次出现的行,就是符合条件的记录。

步骤2
F6单元格输入以下公式,向下向右拖动:
=IFERROR(INDEX(A:A,MATCH(ROW(A1),$D:$D,0)),"")
这个公式稍长了一点,咱们拆解看看:
先说说ROW(A1)部分:
ROW函数的作用是返回参数的行号,ROW(A1)结果就是A1的行号1。当公式向下复制时,ROW(A1)会依次变成ROW(A2)、ROW(A3)……,最终得到递增的序号1、2、3……,结果用作MATCH函数的查找值。

再看MATCH(ROW(A1),$D:$D,0)部分。
MATCH函数的作用是查询指定内容在一行或一列中首次出现的位置。这里要查询的内容是ROW(A1)的结果(也就是数值1)在D列首次出现的位置,查询结果为2。
公式向下复制时,会依次查询1、2、3……在D列首次出现的位置。

得到位置信息了,接下来再使用INDEX函数在A列返回对应位置的内容:
INDEX(A:A,MATCH(ROW(A1),$D:$D,0))
当公式一直向下复制时,增加的序号在D列找不到了,公式会返回错误值,所以在最外层加上IFERROR函数,将错误值转换为空文本""。

如果你使用的是Office 365,用FILTER函数就更简单了:
如下图所示,要根据F2单元格指定的学历,提取出左侧所有符合条件的记录。
只要在G2单元格输入以下公式按一下回车即可,Excel会自动扩展公式范围,拖动公式都不需要了:
=FILTER(A2:D11,B2:B11=F2)

图文制作:祝洪忠

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材