Excel一对多查询(index+small+if)

  • 原创
  • |
  • 浏览:39622
  • |
  • 更新:

使用Excel中可能会经常遇到一对多查询,简单的lookup、vlookup已不能满足需求,这里介绍下index+small+if实现一对多查询。

Excel一对多查询(index+small+if)

工具/原料

  • Excel
  • index、small、if

方法/步骤

  1. 1

    在E2单元格输入  = INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&""

    按Ctrl+shift+回车,向右拖拽公式,向下拖拽公式,即可实现一二三年级对应的人员姓名。

    Excel一对多查询(index+small+if)
  2. 2

    下面分层介绍,if返回一个一维数组,if(条件,为真则返回,为假则返回),IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),如果与D2单元格值相同则反馈B列单元格的行号,如果为假,则返回4^8即65536(97-03版excel单元格个数),所以if函数最终返回值要么是指定单元格对于行号,要么是65536(数据量较大时需具体分析)

    Excel一对多查询(index+small+if)
  3. 3

    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函数里的行号

  4. 4

    最后是index函数,返回行列交叉单元格的值,index(array,row_num,[column_num]),small函数作为index的第二个参数,与array即$A$1:$A9交叉处即为需要返回的值。

  5. 4
    此文章未经授权抓取自百度经验
  6. 5

    &""是为了避免0值得出现,在右拉后,如果结果已全部查询完毕,可能会出现错误提示,可将公式嵌套到iferror中,=IFERROR(INDEX($A$1:$A9,SMALL(IF($B$1:$B9=$D2,ROW($B$1:$B9),4^8),COLUMN(A1)))&"","") 完成后三键齐按(ctrl+shift+回车)即可。

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部