在昨日的交流中,我们探讨了一个关于一对多查找的问题。这种问题在工作中是家常便饭,尤其在诸如人力资源等部门。我们需要根据提供的身份证号码查找同一户号中的所有人员详细信息。
现在,让我们来看看如何解决这个问题。以下是几种不同的方法:
方法一:利用Microsoft 365的新增函数Filter
这种方法要求用户是365版本。Filter函数能完美解决此类筛选问题。结果如下:
使用的公式为:
=FILTER($A$2:$F$14,$E$2:$E$14=VLOOKUP($H$2,$C$2:$E$14,3,0),"")
只需在一个单元格中输入此公式,Excel会自动填充其余单元格,既快速又高效。
方法二:固定函数组合INDEX+SMALL+IF+ROW
这是一个经典的函数组合,已经在多次分享中提及。其原理并不复杂,只需套用公式即可。
公式为:
=Index(要取值的范围,Small(if(取值条件,row(数据源行数),9^9),row(a1))
在这个公式中,取值范围、取值条件和数据源行数是关键。接下来,我们来看看如何应用这些参数。
公式中的取值范围是:A2:A14,因为我们要得到的是姓名;
取值条件:由于身份证是唯一的,如果用身份证作为查找条件,只能得到一个结果。所以这里运用了Vlookup进行转换,将身份证对应的户号查找出来,然后再根据户号查找所有信息。因此,这里的取值条件应该是户号;
数据源行数:从赵一开始到最后一行的刘四,总共是13行,所以用了Row(1:13)
完成上述步骤后,只需拖动鼠标即可填充公式。
对于这种错误的引用,只需在最外面套一个IFERROR即可解决。虽然公式看起来复杂,但只要掌握其规律,就可以像高中时学习的固定公式一样轻松套用。
方法三:使用Power Query转换(难度较高)
有兴趣的朋友可以尝试这种方法,需要对M函数有一定了解。在编辑栏中输入:
代码为:
= Table.AddColumn(源, "自定义", each Table.SelectRows(户口信息,(y)=>y[户号]=Table.SelectRows(户口信息,(x)=>x[身份证号]=[请输入身份证号码])[户号]{0}))
扩展数据后,关闭并上载即可实现一键刷新,无需重复操作。
要理解上述公式,需要掌握:
Table.SelectRows
(x)=>x
表格之前的嵌套关系
以上就是解决一对多查找问题的三种方法。如果你有更好的解决方案,欢迎分享,让我们一起进步。
最近,我正在录制Power Query的课程,从基础到进阶,希望这一系列教程能帮助你提升技能。毕竟,界面的操作只能发挥全部能力的20%,剩下的80%都需要通过M函数来实现。
如果你有兴趣继续学习,请点击下方的直达课程链接,后续会有相关介绍。