Excel一对多查询(index+small+if)
使用Excel中可能会经常遇到一对多查询,简单的lookup、vlookup已不能满足需求,这里介绍下index+small+if实现一对多查询。
在E2单元格输入 =INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&""
按Ctrl+shift+回车,向右拖拽公式,向下拖拽公式,即可实现一二三年级对应的人员姓名。
下面分层介绍,if返回一个一维数组,if(条件,为真则返回,为假则返回),IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),如果与D2单元格值相同则反馈B列单元格的行号,如果为假,则返回4^8即65536(97-03版excel单元格个数),所以if函数最终返回值要么是指定单元格对于行号,要么是65536(数据量较大时需具体分析)
small返回数组中第K个最小值,small(array,k),此处将if函数返回的数组作为small的第一参数,返回数组中第COLUMN(A1)个最小值,E列为COLUMN(A1)=1,即第一个最小值,F 列为第二个最小值,以此类推,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)),所以small函数最终返回的是if函数里的行号
最后是index函数,返回行列交叉单元格的值,index(array,row_num,[column_num]),small函数作为index的第二个参数,与array即$A$1:$A9交叉处即为需要返回的值。
&""是为了避免0值得出现,在右拉后,如果结果已全部查询完毕,可能会出现错误提示,可将公式嵌套到iferror中,=IFERROR(INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&"","") 完成后三键齐按(ctrl+shift+回车)即可。
版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/article/190442.html