
Excel関数基礎#06|INDEX関数とMATCH関数の使い方
今回のテーマは「INDEX関数」と「MATCH関数」の使い方です!
使ったことない!という方もいるのではないでしょうか?
VLOOKUPの代替としても非常に便利な「INDEX関数」と「MATCH関数」を組み合わせた使い方について解説します。これらの関数を使うと、縦方向だけでなく、横方向にも柔軟な検索が可能となり、データの取得や操作の幅が広がります。
ぜひ習得していきましょう!
筆者の自己紹介はこちら↓

実はINDEX関数とMATCH関数をそれぞれ単独で使うシーンはあまりありません。2つを組み合わせて使用することがほとんどです。
とはいえ、両方の関数の意味を理解する必要があるので、まずはそれぞれの関数について解説していきます。
INDEX関数の使い方
まずはINDEX関数についてです。
指定した範囲の中から、特定の行番号と列番号にある値を返す関数です。
基本構文は次の通りです。
=INDEX(範囲, 行番号, [列番号])
範囲: データの範囲(テーブルやリストなど)
行番号: 取得したいデータがある行の番号
列番号: 必要に応じて、複数列のデータから特定の列を指定
言葉だけではわかりづらいと思いますので、本日も図で説明していきます。

こうすると簡単ですね。
「選択した範囲の中から、何行目、何列目のセルの値を返してください」という意味です。
今回のケースだと、3行目2列目のデータ、つまり、高橋花子さん(3行目)の売上(2列目)である700が取得されます。
MATCH関数の使い方
続いてMATCH関数の使い方です。
MACTH関数は、指定した範囲内で、検索したい値が何番目にあるかを返す関数です。
=MATCH(検索値, 検索範囲, [一致の種類])
検索値: 検索したい値(例: 名前やID)
検索範囲: 検索対象となるデータの範囲
一致の種類: 0は完全一致、1はおおよその一致を指定
こちらも図で見ていきましょう。

「検索値を探してください。探すのは検索範囲の中からで、何番目に合ったか教えてください。」と日本語に訳すと理解できます。
ちなみに、選択範囲は列ではなく行でも可能であることは覚えておいてもいいかもしれません。

INDEXとMATCH関数の組み合わせ
冒頭で説明した通り、INDEX関数とMATCH関数をそれぞれ単独で使うシーンはあまりなく、2つを組み合わせて使用することがほとんどです。
ここからは、INDEX関数とMATCH関数を組み合わせた使い方について説明していきます。
まず、どのように組み合わせるのかというと、以下の図の通りです。

INDEX関数の行番号や列番号を、MATCH関数で指定します。
・INDEX関数:行番号と列番号の指定が必要
・MATCH関数:検索値がどこにあるか番号を返す
という性質を利用して組み合わせを行っています。
イメージしやすいよう、実際に使用する場面を想定して説明をしていきます。全部で3つ紹介します。
使い方①行と列を組み合わせたクロス検索
例えば、以下のような表から、特定の部署(例:営業1部)と年度(例:2023年)の売上を取得したい場合に利用できます。

この場合、以下のような式になります。
=INDEX(B2:D4, MATCH("営業1部",A2:A4,0), MATCH("2023年",B1:D1,0))
複雑なので、パーツに分けて考えていきましょう。
=INDEX(
範囲:B2:B4セルの中で、
行番号:A2:A4セルの中で"営業1部"の位置(=上から1番目)
列番号:B1:D1セルの中で"2023年"の位置(=左から3番目)
)
ということになります。よって、
=INDEX(B2:D4, 1, 3)
と同じ意味になり、結果は「600」になります。
使い方②右から左へデータの検索
2つ目は、VLOOKUP関数では対応できない「右から左」への検索です。
例えば、社員データベースから、従業員の名前(例:鈴木真一)に基づいて部署(例:営業2部)を取得したい場合。

これは、VLOOKUP関数では対応できません。右(鈴木真一)から左(営業2部)の検索になってしまうからです。
INDEXとMATCH関数を組み合わせれば、以下のような式で取得できます。
=INDEX(A2:A4,MATCH("鈴木真一",B2:B4,0))
A2:A4セルの中から、B2:B4セルの中の鈴木真一の位置(=上から2番目)の値を返すという意味です。
使い方③列番号が動的に変動するデータの検索
3つ目は、列番号が動的に変わる検索を行う場合です。「列番号が動的に変わる」のイメージが付きづらいと思いますので、説明していきます。
まず以下のケースを見てください。

VLOOKUP関数と、INDEXとMATCH関数の組み合わせの2パターンで、鈴木真一の部署を取得しています。
それぞれ以下の式になっていますが、結果は同じです。
VLOOKUP関数
=VLOOKUP("鈴木真一",A2:B4,2,0)
INDEX関数とMATCH関数の組み合わせ
=INDEX(B2:B4,MATCH("鈴木真一",A2:A4,0))
では次に、B列に新しい列を挿入してみます。
すると、VLOOKUP関数の取得値が0になってしまっています。

これは、VLOOKUP関数は「鈴木真一さんを基準に左から2番目のセル」の値(=B3セルの値)を相変わらず取得してしまうためです。
(VLOOKUP関数では、取得したセルが空欄だと0と表示されます)
一方のINDEXとMATCH関数の組み合わせでは、B列を挿入しても、正しく「営業2部」を取得できています。
これが、列番号が動的に変わる検索です。
本日はINDEX関数とMATCH関数、そしてこれらを組み合わせた使い方について解説しました。
これらの関数をマスターすると、INDEXとMATCHを使って柔軟なデータ検索ができるようになります。実は、VLOOKUPでは難しい複数条件の検索もあるのですが、ちょっと応用編になるので別の機会に解説します。
このような発信を日々行っていますので、
・Excelを覚えたい!
・でも何から覚えればいいかわからない!
という方の参考になれば幸いです!お疲れ様でした。
※このアカウントではこのような形で解説しています。Excelだけではなく、他のスキルについても記事を書いていく予定なので、気になる方はフォローをお願いします!
スキ、コメントもお待ちしています。