一对多查询,我只想到4种方法

方法一:高级筛选

将所需条件复制到H1:H2,将所需信息字段复制到H4:J4,如下图:
依次点击【数据】——【排序和筛选】——【高级】,进行如下设置:
点击【确定】,结果瞬间就出来啦~
在H5单元格输入公式:
=ROW()-4
把鼠标移动到该单元格右下角,光标变成“+”后,双击或下拉就可以填充公式了
ROW()返回的是本单元格所在行号(H5单元格的行号是5),可用于生成连续的序号。
优点:能够快速满足李老板的要求,支持多条件筛选
缺点:不能随时更新,不能按需求更新,如果明天老板想看看谁休假了,只能重新操作一遍。

方法二:数据透视表

选中原始数据区域中的任意单元格,依次点击【插入】——【数据透视表】,放置数据透视表默认为“新工作表”,也可以选择现有工作表中的任意位置,点击【确定】
将“人员状态”拖至“筛选”区域,将“姓名”、“入职日期”拖至“行”区域,
可自行在结果前添加“序号“字段,输入公式:
=IF(H4='','',ROW()-3)
IF函数用于判断H列是否为空,如果不为空,则添加序号:

优点:可随时更新,支持多条件筛选,统计方式多样

缺点:重新筛选后,表格格式就会恢复为默认格式

方法三:OFFSET+MATCH

将G列设为辅助列:
G4 =IFERROR(OFFSET(A1,MATCH($I$1,D2:$D$59,0),),'')
这种嵌套公式,我习惯从里往外看:
MATCH($I$1,D2:$D$59,0),用于查找符合I1单元格中指定条件的第一个结果在D2:$D$59中的位置,得出结果为1
OFFSET是一个偏移函数,其中各参数的意思是:OFFSET(基点,偏移的行数,偏移的列数,[新引用的行数],[新引用的列数])
第二参数使用正数时,表示从基地向下偏移,负数表示向上偏移。
第三参数使用正数时,表示向右偏移,使用负数时表示向左偏移。
第四和第五参数是可选的,如果省略这两个参数,新引用的区域就是和基点一样的大小。
OFFSET(A1,MATCH($I$1,D2:$D$59,0),),基点是A1单元格,偏移的行数由MATCH函数计算得出,即向下偏移1行,第三参数省略,但逗号不能省略,得出的结果是1,这里的1是A2单元格中的值;
最外面的IFERROR函数,用于屏蔽错误值,即如果公式错误,则显示为空;
G5=IFERROR(OFFSET(INDIRECT('A'&G4+2),MATCH($I$1,INDIRECT('$D'&G4+2&':$D$61'),0)-1,0),'')
由于MATCH只能返回第一个符合条件的单元格的位置,所以G5及后面单元格的公式与G4不一致,这里用到了INDIRECT函数来不断修改指定的查找区域。
H4=IF(I4='','',ROW()-3)
I4&J4=IFERROR(VLOOKUP($G4,$A$1:$D$59,MATCH(I$3,$A$1:$D$1,0),0),'')
这里的MATCH函数用的比较巧妙,它给出了指定字段在原始数据中所处列数,若修改了I3、J3单元格的内容,结果也会随之变化;若原始数据区域中各字段位置有变化,所得结果也不会出错。MATCH函数使整个公式活了起来。
G:J列公式设置好后,下拉填充即可
优点:可按需求、随时更新
缺点:公式复杂,不太好理解

方法四:COUNTIF

在A列添加辅助列
A2 =COUNTIF($E$1:E2,$I$1)
COUNTIF函数的统计区域是$E$1:E2, E1是行绝对引用, E2是相对引用。当公式向下复制时,就会变成$E$1:E3、$E$1:E 4……一个不断扩展的区域,从这个动态区域中统计E列符合I1单元格中指定条件的单元格个数。
H4=IF(ROW()-3>MAX(A:A),'',ROW()-3)
如果ROW()-3的结果大于A列中的最大值,则返回空值,否则返回连续的序号。
I4、J4单元格公式与方法三一致
H:J列公式设置好后,下拉填充即可
优点:可按需求、随时更新,公式相对简单
缺点:暂时没发现
(0)

相关推荐