Hello,大家好,當我們使用vlookup函數查找數據遇到重複值得時候,函數僅僅會返回第一個查找到的結果,但是在日常的工作中我們經常要根據一個值來查找到多個結果,這個時候vlookup函數就不能滿足我們需求了,今天就跟大家分享下在excel中如何實現一對多查詢
如下圖,我們想要根據部門,將相同部門的人都放在一行中,只需要點擊表格中的第一個單元格,輸入公式
=IFERROR(INDEX($B:$B,SMALL(IF($A:$A=$F2,ROW($A:$A)),COLUMN(A1))),"")&""
按ctrl+shift+回車向右向下拖拉公式即可快速完成,在這裡我們就是通過查找部門來快速的返回多個結果
下面跟大家詳細的講解下這個公式是如何理解在,在這裡我們利用數組公式來完成查找的,函數是以index函數為主體來返回結果,
Index函數
第一參數:$B:$B,就是我們要返回的結果列
第二參數:SMALL(IF($A:$A=$F2,ROW($A:$A)),COLUMN(A1))),使用small函數來獲取查找值的具體位置
在這裡我們主要來理解下small函數,small函數的作用是返回一組數據中從小到大的第n個值,他的參數一共有兩個,第一參數:數據區域,第二參數:數據區域的位置(從小到大)
在這裡Small函數在公式中的參數為
第一參數:IF($A:$A=$F2,ROW($A:$A))
第二參數:COLUMN(A1))
在IF($A:$A=$F2,ROW($A:$A))中,我們使用if函數來判斷A列的數據是不是等於f2單元格,也就是行政部,如果a列的單元格等於行政部就讓函數返回等於行政部位置的行號,在這裡我們省略了if函數的第三參數,當條件不正確的時候函數就會返回false,他的結算結果如下圖
因為small函數會自動將false這個結果忽略掉,所以現在small函數的第一參數僅僅包括3,5,7,9,17,這5個數據,因為我們在行方向上拖動數據的,所以我們使用COLUMN(A1))來構建一個從1開始的序列,這樣的話我們就能分別將這5個列號提取出來,將提取出來的列號作為index的第二參數來返回對應的結果
然後我們使用IFERROR來將錯誤值屏蔽掉錯誤值,最後在公式的最後使用連接符號連接上一個空值,是為了避免當我們的查找值為空的時候函數返回0
以上就是這個index+small+if函數的計算過程,怎麼樣,你學會了嗎?
我是excel從零到一,關注我持續分享更多excel技巧