【Excel】INDEX関数とMATCH関数で表やテーブル内の値を検索する

アイキャッチ

INDEX関数MATCH関数を組み合わせることで、表やテーブル内の値を自由自在に検索することができます。INDEX関数の引数にMATCH関数を使用するので数式は少し長くなりますが、理解してしまえば難しい事はありません。

VLOOKUP関数はテーブルの左端に検査値が必要ですが、この関数の組み合わせではその制限はありません。VLOOKUP関数の上位互換と考えていいでしょう。

目次

INDEX関数の使い方

INDEX関数は範囲内で指定した行と指定した列が交差したセルの値を返します。構文は配列形式参照形式の2種類がありますが、参照形式は割愛します。

配列形式

=INDEX(配列, 行番号, [列番号])

配列の中から指定した行番号と指定した列番号が交差するセルの値を返します。

配列

省略不可。セル範囲を指定します。

行番号

省略不可。ただし、セル範囲が1行の場合はここを列番号に置き換えることができます。

列番号

省略可。セル範囲が1列の場合は省略できます。

INDEX関数の引数を省略すると極端に可読性が悪くなります。引数は省略しないことをおすすめします。

  1. 配列(範囲)を指定する
  2. 行番号を指定する(範囲の中で何行目かを指定する)
  3. 列番号を指定する(範囲の中で何列目かを指定する)

INDEX関数のサンプル

Sample
表(テーブル)の行と列を指定して検索
INDEX関数のサンプル画像。テーブル内で2行目と4列目を指定している。

=INDEX(C3:G6,2,4)

C3:G6内で2行目と4列目の交点はF4です。F4の値が2なので2を返します。

仕組みはとても簡単です。サンプルは行番号列番号で指定しましたが、セル参照させることもできます。行番号用のセルと列番号用のセルを用意すれば、入力した数値で戻り値が変化します。

  • 配列から行番号列番号がはみ出すと#REF!を返します。

INDEX関数は座標を割り出す関数です。

MATCH関数の使い方

MATCH関数は検索範囲内から検索値の位置を返す関数です。単独で使用するケースはあまりなく、INDEX関数VLOOKUP関数等と組み合わせて使用する機会が多い関数です。

=MATCH(検査値,検査範囲,[照合の種類])

検査範囲の中から検査値を検索し、何番目に見つかるかを数値で返します。

検査値

省略不可。検査範囲の中で検索する値を指定します。数値、文字列、論理値(TRUE or FALSE)またはこれらに対するセル参照も指定できます。

検査範囲

省略不可。検索範囲を指定します。

照合の種類

省略可。省略すると既定値の1が適用されます。10-1のいずれかの数値で指定します。数値の意味は下表の通りです。

照合の種類動作
1検査値以下の最大値の位置を返します。検査範囲は昇順に並んでいる必要があります。
0検査値と等しい値の最初の位置を返します。
-1検査値以上の最小値の位置を返します。検査範囲は降順に並んでいる必要があります。

検査範囲の中に検査値が複数ある場合、最初に見つかった位置を返すので注意が必要です(2つ目以降は抽出されない)。

  1. 探す値を指定する
  2. 探す範囲を指定する
  3. 照合方法を指定する…等しい値を探すなら基本0でOK

処理時間にこだわるなら照合の種類1-1も使いこなせた方がいいです。線形探索2分探索を勉強すれば理解できます(その内別記事で解説します)。

MATCH関数のサンプル

Sample
表(テーブル)の日付を検索
match関数サンプル画像。テーブル内で日付を検索している。

テーブル内で日付を検索するサンプルです。検査範囲C2:G2の中で検査値12/4を検索します。

範囲内で4番目に見つかるので4を返します。

MATCH関数は検査値の位置を返す関数です。位置を他の関数の引数にあてることによって、その関数の参照範囲などを可変させることができます。

MATCH関数とINDEX関数を組みわせたサンプル

INDEX関数MATCH関数を組み合わせます。

  • INDEX関数=座標を割り出す関数
  • MATCH関数=検査値の位置を返す関数

要は、INDEX関数MATCH関数=「表の見出しを数値に置き換えて座標を割り出す関数」になります。

Sample
MATCH関数とINDEX関数で表(テーブル)の値を検索する
INDEX関数とMATCH関数を組み合わせたサンプルの画像。詳細は以下。

=INDEX(C3:G6,MATCH(D8,B3:B6,0),MATCH(B8,C2:G2,0))

C3:G6内で氏名と日付を指定して検索します。

  1. MATCH(D8,B3:B6,0)谷風 長道を検索し、1を返します。
  2. MATCH(B8,C2:G2,0))で12/4を検索し、4を返します。
  3. =INDEX(C3:G6,1,4)となり25を返します。

INDEX関数の配列の中から行と列をMATCH関数の検査値で指定して検索するこの形をテンプレートとして覚えて下さい。テーブル内でのデータ検索の基本になります。

STEP
検索要素が行のみの場合
INDEX関数とMATCH関数を組み合わせたサンプルの画像。詳細は以下。

=INDEX(C3:C6,MATCH(B8,B3:B6,0),1)

先ほどのサンプルと違い、行方向のみで検索を行うサンプルです。

  1. MATCH(B8,B3:B6,0)谷風 長道を検索し、1を返します。
  2. INDEX(C3:C6,1,1)となり10を返します。

=VLOOKUP(B8,B3:C6,2,FALSE)でも同じ戻り値を返します。

VLOOKUP関数は検査値がテーブルの左端にある必要がありますが、INDEX関数MATCH関数の組み合わせではその制限はありません。

=INDEX(A3:A6,MATCH(B8,B3:B6,0),1)でA列の中から値を返すこともできます。

INDEX関数とMATCH関数の組み合わせはVLOOKUP関数より便利

行見出しと列見出しで検索する場合はVLOOKUP関数のみでは代用できません。INDEX関数MATCH関数を組み合わせて検索します。行見出しのみ場合、検査値が検索値より左にあればVLOOKUP関数が使えます。

私は使い分けはしていません。全てINDEX関数+MATCH関数の組み合わせを使用しています。

値を検索する作業を人間がやっていては時間の無駄です。INDEX関数MATCH関数を使いこなして仕事時間を短縮してください。

この関数の組み合わせは慣れれば簡単です。どちらかというと「検索に容易に対応できる表の作成」の方が難しいです。

ここではINDEX関数MATCH関数の組み合わせを説明しましたが、OFFSET関数MATCH関数の組み合わせも便利です。別記事で解説しているので是非ご覧下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次