Chapter 7. 函式 (二):查詢與篩選7.2 查詢函式:INDEX / MATCH

7.2 查詢函式:INDEX / MATCH


本節將介紹兩個非常重要的函式 — INDEX / MATCH

  • INDEX:輸出第 m 列第 n 欄的值:

語法

INDEX (參照, [], [])

輸入

  • 參照:一個多欄多列的陣列或儲存格範圍。
  •  / :要輸出 參照 的第幾列 / 欄,預設為 0 (輸出全部欄 / 列)。

輸出

參照 的第  列第  欄,若超出範圍將輸出 #NUM!。

  • MATCH:尋找某個值出現在第幾列 / 欄:

語法

MATCH (搜尋準則, 範圍, [搜尋類型])

輸入

  • 搜尋準則:要找的項目。
  • 範圍:要在哪裡找,單欄或單列的陣列或範圍。
  • 搜尋類型:要怎麼找,有 1 / 0 / -1 三種,預設為 1,使用時機如下:
    • 0:完全比對,即 搜尋準則 在 範圍 中有完全一樣的值才會輸出。
    • 1:範圍 遞增排列、輸出小於等於 搜尋準則 的最大值所在位置。
    • -1:範圍 遞減排列、輸出大於等於 搜尋準則 的最小值所在位置。
    • 上述的 1 / -1 僅適用在 搜尋準則 是數字的情形下。

輸出

搜尋準則 在 範圍 中的位置,若找不到則會輸出 #N/A。

以下使用第 1 章的會員資料檔並搭配四個範例說明各函式的用法,為了方便說明在此進行以下設定:

  • 將所有交易記錄檔的各欄位使用已命名範圍命名成表頭名稱。
  • 將 A:I 命名為「會員資料」、第 1 列命名為「會員資料表頭」。
  • 將會員卡號的格式設定為自動 (數字)。
  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. 卡號 (1) 1777、(2) 1775 在會員卡號的位置

    公式

    (1) =MATCH(1777,會員卡號,0)

    (2) =MATCH(1775,會員卡號,1)

    解說

    (1) 因為會員卡號是數字格式,所以輸入 =MATCH("1777",會員卡號,0) 會輸出 #N/A!。

    (2) 1775 沒有出現在會員卡號,且在會員資料檔中會員卡號按遞增排序,若在此將 搜尋類型 設定為 1,會輸出會員卡號中 <= 1775 的最大值,也就是 1771 的所在位置。

  2. 「家庭月收入」出現在會員資料表頭的位置

    公式

    =MATCH("家庭月收入",會員資料表頭,0)

    解說

    MATCH 不只可以查詢 搜尋準則 出現在某一欄的第幾列,也可以查詢出現在某一列的第幾欄。

  3. 會員卡號 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 在實務中最常運用到的方式。