根据身份证号码查询户口本上所有人的信息 身份证号码查询



昨天在群里丢了个问题 , 是关于一对多查找的 , 虽然关于查找的话题永远都没有停止过 , 不过在工作中对于查找来说也是家常便饭 , 尤其是类似于人力资源这种部门 。来看看题 , 原始数据如下:


需要根据提供的身份证号码查找同一户号中的所有人员详细信息 。


(注:案例纯属虚构 , 也是在某个教材中得到的)


第一种:Microsoft365的新增函数Filter
看标题很明显 , 必须是365用户 , Filter中文翻译就是筛选的意思 , 因此对于这种筛选的问题用它肯定没错 。我们将结果都写在最下方:


公式为:
=FILTER($A$2:$F$14,$E$2:$E$14=VLOOKUP($H$2,$C$2:$E$14,3,0),"")
只需要将公式写在一个单元格中就可以了 , 后面的全部自动带出 , 非常的快捷高效;


第二种:固定函数组合INDEX+SMALL+IF+ROW
关于这个经典函数组合 , 在分享中应该提过好几次 , 原理就不多少说 , 你只需要记着套用就好了 。
=Index(要取值的范围 , Small(if(取值条件,row(数据源行数),9^9),row(a1))
上述公式中只有取值范围、取值条件和数据源行数是需要关注的 , 一起来看看具体怎么套 。


公式为:
=INDEX($A$2:$A$14,SMALL(IF(VLOOKUP($H$2,$C$2:$E$14,3,0)=$E$2:$E$14,ROW($1:$13),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函数来实现 。


如果你愿意继续学习 , 那么可以点击下方直达课程链接 , 后续会有相关介绍 。

    推荐阅读