Woman typing on a laptop
Excelで表から特定の情報を取り出したいとき、あなたはどうしていますか?
VLOOKUP関数を使っている方も多いと思いますが、「列の位置が変わると壊れる」「左側の値が取れない」といった不便さを感じたことがあるのではないでしょうか。そんなときに役立つのがINDEX関数とMATCH関数の組み合わせです。
この2つの関数を使えば、より柔軟で強力な検索が可能になります。本記事では、初心者の方でもわかるように、基本的な使い方から応用テクニックまでを解説していきます。
まずはINDEX関数の基本からおさえましょう。
INDEX関数は、指定した範囲の中から「行」と「列」を指定して、その交差するセルの値を取り出す関数です。
excelコピーする編集する=INDEX(範囲, 行番号, [列番号])
たとえば、A1:C3の範囲の中から、2行目・3列目の値を取り出す場合:
=INDEX(A1:C3, 2, 3)
この式は、B2の行のC列、つまりセルC2の値を返します。
列番号を省略して、1列のデータから取り出す場合もあります。
=INDEX(A1:A10, 3)
これはA3の値を返します。
MATCH関数は、指定した値が範囲内の何番目にあるかを返す関数です。
たとえば、「売上」という文字がA1:A10のどこにあるかを調べるときに使います。
=MATCH(検索値, 検索範囲, [照合の種類])
=MATCH("売上", A1:A10, 0)
この式は、「売上」がA列の何番目の行にあるかを返します。たとえばA3にあるなら「3」が返されます。
この2つの関数を組み合わせると、VLOOKUPよりも自由度の高い検索が可能になります。
=INDEX(参照範囲, MATCH(検索値, 検索範囲, 0))
MATCH関数で行番号を取得し、それをINDEX関数に渡して、対応する値を取り出します。
以下のようなデータがあるとします:
A列(社員ID) | B列(社員名) |
---|---|
101 | 佐藤 |
102 | 鈴木 |
103 | 田中 |
たとえば、「鈴木さんの社員ID」を求めたい場合:
=INDEX(A2:A4, MATCH("鈴木", B2:B4, 0))
VLOOKUP関数と比較すると、INDEX+MATCHには以下のような利点があります:
VLOOKUPは、左から右への検索しかできませんが、INDEX+MATCHなら、検索列と取得列の位置が自由です。
VLOOKUPは列番号指定のため、途中で列を追加すると壊れますが、MATCHは動的に列番号を返すため壊れにくい。
大量データ処理時に、MATCHとINDEXの方が処理が速くなるケースがあります。
INDEX関数は、行と列を両方指定できます。MATCHを2つ使えば、行・列の両方を指定して交差する値を取り出すことも可能です。
A列(社員名) | B列(1月) | C列(2月) | D列(3月) |
---|---|---|---|
佐藤 | 100 | 150 | 120 |
鈴木 | 90 | 130 | 110 |
田中 | 80 | 140 | 100 |
たとえば、「鈴木」さんの「2月」の売上を取り出すには:
=INDEX(B2:D4, MATCH("鈴木", A2:A4, 0), MATCH("2月", B1:D1, 0))
行方向と列方向両方で位置を検索し、該当する交点のセルを取り出しています。
検索値をセルに入力できるようにすれば、動的な検索シートが作れます。
=INDEX(B2:D4, MATCH(B1, A2:A4, 0), MATCH(C1, B1:D1, 0))
これにより、ユーザーが検索項目を変えるだけで、検索結果も変わる柔軟な検索表が完成します。
MATCH関数が値を見つけられなかったときに出ます。
→ 入力ミス、余計なスペースが原因の場合もあります。
INDEX関数が無効な位置を参照しようとしたときに出ます。
→ MATCHの返り値が0以下、または範囲外の数値。
=IFERROR(INDEX(…), "該当なし")
エラーが出たときに「該当なし」などのメッセージを表示して、見栄えを整えましょう。
MATCH関数は、部分一致検索ができませんが、配列数式やFILTER関数(Excel 365以降)を使えば応用可能です。
複数条件で一致する行を探したい場合は、配列数式やINDEX+MATCH+&記号の組み合わせで対応できます。
INDEX関数とMATCH関数の組み合わせは、VLOOKUPよりも柔軟で応用範囲の広い検索手段です。
一度使い方を覚えれば、データ分析や報告書作成において、あなたのExcel作業が劇的に効率化されるはずです。
ぜひこの機会に、INDEX+MATCHの組み合わせをマスターしてみてください!