今回は、INDEX関数とMATCH関数を使用して、値を取得(ルックアップ)してみたいと思います。INDEX関数とMATCH関数を使用することで、VLOOKUP関数ではできなかったルックアップをすることが可能です。
はじめに
今回、INDEX関数とMATCH関数を使用します。また、VLOOKUP関数についても一部取り扱います。
INDEX関数とMATCH関数などの使い方については、別の記事で書いてますので、知らないよという方は、下記をご覧ください。
以下では、INDEX関数、MATCH関数及びVLOOKUP関数の概要のみ記載しておきます。
INDEX関数
INDEX関数は、指定した範囲、行番号、列番号からセルの値を取得する関数です。
INDEX関数の書式
今回は、配列形式のINDEX関数を使用します。
配列形式
INDEX(配列, 行番号, 列番号)
配列 | 必須 | セルの範囲または配列を指定します。 |
行番号 | 必須(※) | 範囲(配列)中の値を返す行を指定します。 ※引数「配列」が1行のみの場合省略可能です。 |
列番号 | 必須(※) | 範囲(配列)中の値を返す列を指定します。 ※引数「配列」が1列のみの場合省略可能です。 |
MATCH関数
MATCH関数は、指定した検査範囲における検査値の位置を返す関数です。
MATCH関数の書式
MATCH(検査値, 検査範囲, [照合の種類])
検査値 | 必須 | 検査したい値またはセル参照を指定します。 |
検査範囲 | 必衰 | 検査値を検査する範囲(単一の行・列)または配列(1次元)を指定します。 |
照合の種類 | 任意 | 表2をご覧ください。 |
1または省略 | 検査値以下の最大値を検査します。ただし、検査範囲が昇順で並べ替えされている必要があります。 |
0 | 検査値と等しい最初の値を検査します。 検査値にワイルドカード文字(*,?,~)を使用できます。 |
-1 | 検査値以下の最小値を検査します。ただし、検査範囲が降順で並べ替えされている必要があります。 |
VLOOKUP関数
VLOOKUP関数は、検索値と列番号を指定して、表や範囲などから値を取得する関数です。
VLOOKUP関数の書式
VLOOKUP(検索値, 範囲, 列番号, [検索の型])
検索値 | 必須 | 検索する値を指定します。値、参照、文字列を指定します。 |
範囲 | 必須 | 検索値と戻り値(列番号の列)を含むセル範囲を指定します。ただし、範囲の1番左側の列が検索値を検索する列になるようにします。範囲に名前付き範囲またはテーブル名を使用することもできます。 |
列番号 | 必須 | 戻り値の列を指定します。引数「範囲」の一番左側の列(検索値の列)を1とします。 |
検索の型 | 任意 | TRUEを指定または省略:最も近い値(近似一致)を検索します。 FALSEを指定:完全に一致した値(完全一致)を検索します。 |
INDEX関数とMATCH関数を使用したルックアップ
図1のような場合を考えます。

行番号と列番号を指定して値を取得
範囲「B3:E8」の5行2列の値である「オレンジ」を取得するため、H2セルに入力されている行番号「5」、H3セルに入力されている列番号「2」を用いて、次のような数式をH4セルに書いたとします。(図2)
=INDEX($B$3:$E$8,H2,H3)

確かに、この数式で問題なく目的の値「オレンジ」を取得することができました。しかし、INDEX関数の引数である行番号の「5」や列番号の「2」という数字が何を意味しているのかが分かりにくいです。
そこで、H2セルの値を数字の「5」ではなく商品コード「f02a」、H3セルの値を数字の「2」ではなく「商品名」というようにして値を取得することを考えます。(図3)

先程の数式を次のように書き換えます。
=INDEX($B$3:$E$8,MATCH(H2,$B$3:$B$8,0),MATCH(H3,$B$2:$E$2,0))
数式は、少し複雑に見えますが、INDEX関数の引数である行番号、列番号にMATCH関数を使用しています。
MATCH関数は、検索したい値の位置を返す関数なので、行番号や列番号というような引数を持つ関数と非常に相性が良いです。
「MATCH(H2,$B$3:$B$8,0)」は、B3セルからB8セルの範囲の商品コード「f02a」の位置「5」が戻り値となります。
「MATCH(H3,$B$2:$E$2,0)」は、B2セルからE2セルの範囲の「商品名」の位置「2」が戻り値となります。
また、MATCH関数は、引数の検査値から行番号や列番号の位置を調べているため、表の行や列の挿入・削除を安全に行うことができます。

MATCH関数を使用しないと表の行や列の挿入・削除によって、行番号や列番号が変わってしまうね。
検索値の左側の値を取得できる
VLOOKUP関数は、検索値の右側の値は取得することができましたが、検索値の左側の値を取得することができませんでした。
INDEX関数とMATCH関数を使用することで、検索値の左側の値を取得することができます。
図4のような場合を考えます。商品コード「f02j」の価格である「300」を取得したいとします。

図4では、値を取得したい列が検索値(の列)より左側にあるため、VLOOKUP関数は使用できません。
このようなときに、INDEX関数とMATCH関数を使用することで、検索値より左側の値を取得することができます。今回の例の場合は、H3セルに下記のように入力します。
=INDEX($D$3:$D$5,MATCH(H2,$E$3:$E$5,0))
INDEX関数は、1つ目の引数「配列」が1列のみのときは、3つ目の引数である「列番号」を省略できます。2つ目の引数である「行番号」は、MATCH関数を利用して行番号を取得しています。
大文字と小文字を区別して値を取得する
VLOOKUP関数の引数「検索値」は、大文字と小文字を区別できません。INDEX関数などを用いて大文字と小文字を区別して値を取得することができます。
コメント