用Small、If、Index、Indirect、Row、Char、Match實現一對多查找

一.應用實例:

1.要求:通過G2單元格的下拉菜單選擇不同的班級,在右側單元格區域可以查找出對應班級所有的學生的姓名和對應的成績。(返回查找結果區域的表頭可以與原表頭區域不對應)

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


2.話不多少,先給朋友們上照效果圖看看是不是你們想要的操作。

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


二.操作步驟:

1.在H2單元格輸入公式

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


=INDEX(INDIRECT(CHAR(64+MATCH(H$1,$A$1:$E$1,0)) & ":"& CHAR(64+MATCH(H$1,$A$1:$E$1,0))),SMALL(IF($A$2:$A$9=$G$2,ROW($A$2:$A$9),10000),ROW(C1)))&""

2.公式解析:

(1)CHAR(64+MATCH(H$1,$A$1:$E$1,0))返回要查找字段在原始表頭的列的位置用大寫字母ABC…表示,例如查找數學時返回大寫字母D。

(2)用 & ":"&鏈接(1)所講公式返回對一列的引用。例如(1)結果返回為D時,返回D:D。

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


(3)如果直接把(2)的結果作為對列的引用或返回錯誤,利用Indirect函數可以正確的返回列的引用。經過這三步上述部分公式等價於直接對一列的引用。

(4)IF($A$2:$A$9=$G$2,ROW($A$2:$A$9),10000)判斷每一個要班級是否等於要查找的內容,如果等於返回這個數據所在單元格的行號,如果不等於返回一個比較大的數值(在這裡設置為10000,只要保證這行沒有數據即可)。這樣構成了一個行號和這個比較大的數值所構成的數組。

(5)利用small(步驟4構成的數組,row(A1)),分別提取第一、二、三小的數值。Row(A1)向下拖動時返回一個1、2、 3的數字序列,最終構成的是查找區域等於查找值的行和較大值10000構成的數組。

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


(6)利用Index函數提取(3)對列的引用,(5)所返回行構成的數組所對應的值。

(7)公式最後 &””,是因為10000行的內容是空白,公式會返回數字0。&””可以避免0的出現。

用Small、If、Index、Indirect、Row、Char、Match實現一對多查找


三.注意事項:

1.在這裡一定要注意單元格的引用方式。

2.這是一個函數比較多的綜合應用。

3.數組公式輸入時要以Ctrl+Shift+Enter結束。



分享到:


相關文章: