Chapter 7. 函式 (二):查詢與篩選 › 7.2 查詢函式:INDEX / MATCH
7.2 查詢函式:INDEX / MATCH
本節將介紹兩個非常重要的函式 — INDEX / MATCH
- INDEX:輸出第 m 列第 n 欄的值:
語法 | INDEX (參照, [列], [欄]) |
輸入 |
|
輸出 | 參照 的第 列 列第 欄 欄,若超出範圍將輸出 #NUM!。 |
- MATCH:尋找某個值出現在第幾列 / 欄:
語法 | MATCH (搜尋準則, 範圍, [搜尋類型]) |
輸入 |
|
輸出 | 搜尋準則 在 範圍 中的位置,若找不到則會輸出 #N/A。 |
以下使用第 1 章的會員資料檔並搭配四個範例說明各函式的用法,為了方便說明在此進行以下設定:
- 將所有交易記錄檔的各欄位使用已命名範圍命名成表頭名稱。
- 將 A:I 命名為「會員資料」、第 1 列命名為「會員資料表頭」。
- 將會員卡號的格式設定為自動 (數字)。
- (1) A 欄的第 5 個元素、(2) 第 1 列的第 3 個元素、(3) 會員資料的第 3 列、第 2 欄的元素
公式
(1) =INDEX('會員資料檔'!A:A,5)
(2) =INDEX('會員資料檔'!1:1,0,3)
(3) =INDEX(會員資料,3,2)
解說
(2) 因為參照只有一列,在此也可以代換為 =INDEX('會員資料檔'!1:1,3)。
- 卡號 (1) 1777、(2) 1775 在會員卡號的位置
公式
(1) =MATCH(1777,會員卡號,0)
(2) =MATCH(1775,會員卡號,1)
解說
(1) 因為會員卡號是數字格式,所以輸入 =MATCH("1777",會員卡號,0) 會輸出 #N/A!。
(2) 1775 沒有出現在會員卡號,且在會員資料檔中會員卡號按遞增排序,若在此將 搜尋類型 設定為 1,會輸出會員卡號中 <= 1775 的最大值,也就是 1771 的所在位置。
- 「家庭月收入」出現在會員資料表頭的位置
公式
=MATCH("家庭月收入",會員資料表頭,0)
解說
MATCH 不只可以查詢 搜尋準則 出現在某一欄的第幾列,也可以查詢出現在某一列的第幾欄。
- 會員卡號 1777 的家庭月收入
公式
方法一:已知輸出哪一欄,並使用 MATCH 找出要輸出的列數
=INDEX(家庭月收入,MATCH(1777,會員卡號,0))方法二:使用兩個 MATCH 分別找出要輸出的列 / 欄
=INDEX(會員資料,MATCH(1777,會員卡號,0),MATCH("家庭月收入",會員資料表頭,0))解說
將 INDEX、MATCH 合併使用能完成更進階的搜尋,在此介紹兩種方法:
方法一:已知輸出哪一欄,並使用 MATCH 找出要輸出的列數
已知要輸出 家庭月收入 的其中一列,使用 MATCH 找出 1777 出現在會員卡號的第幾列,輸出該列的 家庭月收入。方法二:使用兩個 MATCH 分別找出要輸出的列 / 欄
要輸出會員資料的某一列、某一欄,但取決於要輸出的會員卡號及欄位,在此用兩個 MATCH 分別找 1777 出現在會員卡號的第幾列、"家庭月收入" 出現在 會員資料表頭 的第幾欄。
由以上範例可以發現,INDEX、MATCH 特別適用於和儲存格互動,例如在某一個儲存格輸入要查詢的欄位及會員卡號,就能使用 INDEX+MATCH 輸出該會員想要取得的資訊,因此在第 7.8 節會介紹 INDEX+MATCH 在實務中最常運用到的方式。