【Excel】INDEX関数とは?使い方・MATCH連携・エラー対処を解説

スポンサーリンク

ExcelのINDEX関数は、表の中から「何行目・何列目」を指定して値を取り出す関数です。

「VLOOKUPだと左側の列を検索できない」「もっと柔軟にデータを取り出したい」と思ったことはありませんか? INDEX関数を覚えると、こうした悩みをスッキリ解決できます。

この記事では、INDEX関数の基本構文から、MATCH関数との組み合わせ方、VLOOKUP・XLOOKUPとの使い分け、よくあるエラーの対処法まで、実務で使える具体例をまじえて解説していきます。

INDEX関数とは?

読み方と語源

読み方は「インデックス関数」です。英語の「index」は「索引・目次」を意味します。表の中から目次のように位置を指定してデータを引っ張ってくる、というイメージですね。

INDEX関数でできること

INDEX関数は、指定した行番号・列番号の位置にあるセルの値を返す関数です。

たとえば「売上管理表の3行目・2列目の値を取り出したい」というケースで活躍します。VLOOKUPのように検索値を使うのではなく、行と列の番号をダイレクトに指定するのが特徴です。

対応環境は、Excel for Microsoft 365、Excel 2024、Excel 2021、Excel 2019、Excel 2016、Excel for the web、Excel for Macです。幅広いバージョンで使えるので安心してください。

配列形式とセル参照形式

実はINDEX関数には「配列形式」と「セル参照形式」の2種類があります。

  • 配列形式: =INDEX(配列, 行番号, [列番号]) — 通常使うのはこちら
  • セル参照形式: =INDEX(参照, 行番号, [列番号], [領域番号]) — 複数の離れた範囲を切り替えて扱いたいときに使う

実務ではほぼ配列形式で事足りるので、この記事では配列形式を中心に解説します。

INDEX関数の書き方(構文と引数)

基本構文

INDEX関数の構文は次のとおりです。

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

引数は3つありますが、列番号は省略できます。配列が1列だけの場合は、行番号だけで値を取り出せるということですね。

引数の詳細

各引数の意味を表にまとめました。

引数必須/任意説明
配列必須値を取り出す対象のセル範囲、または配列定数を指定します
行番号必須(※)配列の中で値を取り出したい行の位置を数値で指定します
列番号任意配列の中で値を取り出したい列の位置を数値で指定します

※列番号を指定する場合は、行番号に 0 を指定することで省略に相当する扱いになります。

ポイントを補足しておきます。

  • 行番号に「0」を指定すると、列全体の値を配列として返します
  • 列番号に「0」を指定すると、行全体の値を配列として返します
  • 行番号・列番号に配列の範囲外の数値を指定すると、#REF! エラーになります

INDEX関数の基本的な使い方

指定した行・列の値を取得する

まずは一番シンプルな使い方です。次のような社員名簿があるとします。

 ABC
1名前部署内線番号
2田中営業部1001
3佐藤経理部2001
4鈴木人事部3001

ここから「佐藤の内線番号(2行目・3列目)」を取得するには、次のように書きます。

=INDEX(A2:C4, 2, 3)

結果は 2001 が返ります。配列 A2:C4 の2行目・3列目、つまりセルC3の値を取り出しているわけです。

もうひとつ例を見てみましょう。配列が1列だけの場合は、列番号を省略できます。

=INDEX(A2:A4, 3)

この場合は「鈴木」が返ります。1列の範囲から3番目の値を取り出す、というシンプルな使い方です。

行番号・列番号に0を指定して行全体・列全体を返す

行番号または列番号に「0」を指定すると、行全体や列全体の値を配列として取得できます。

=INDEX(A2:C4, 0, 2)

この数式は、2列目(B列)の全データ、つまり「営業部」「経理部」「人事部」を配列として返します。SUM関数やAVERAGE関数と組み合わせると便利ですよ。

=SUM(INDEX(A2:C4, 0, 3))

こうすると、3列目(内線番号)の合計を返します。ちょっとむずかしく見えますが、やっていることはシンプルです。「0」は「全部ちょうだい」という意味だと覚えておけばOKです。

INDEX関数とMATCH関数の組み合わせ

INDEX関数の真価は、MATCH関数と組み合わせたときに発揮されます。ここが一番実務で役立つパートなので、しっかり押さえておきましょう。

INDEX+MATCHの基本パターン

MATCH関数は、指定した値が範囲内の何番目にあるかを返す関数です。この「何番目か」をINDEX関数の行番号に渡すことで、検索値に対応するデータを柔軟に取り出せます。

基本パターンはこちらです。

=INDEX(取り出したい範囲, MATCH(検索値, 検索する範囲, 0))

先ほどの社員名簿で、「佐藤」の内線番号を検索値から取得する場合はこうなります。

=INDEX(C2:C4, MATCH("佐藤", A2:A4, 0))

処理の流れを分解すると、次のようになります。

  1. MATCH("佐藤", A2:A4, 0) → 「佐藤」はA2:A4の2番目なので 2 を返す
  2. INDEX(C2:C4, 2) → C2:C4の2番目の値 2001 を返す

MATCH関数の第3引数「0」は完全一致を意味します。ほとんどの場合は「0」を指定すると覚えておいてください。

MATCH関数の詳しい使い方は、こちらの記事で解説しています。

MATCH関数で範囲内から値を検索し、相対的な位置を取得する

2方向のINDEX+MATCH(クロス検索)

MATCH関数を行番号と列番号の両方に入れると、「縦軸と横軸から交差するセルを取り出す」クロス検索ができます。

たとえば、商品×月のマトリクス表から「商品B」の「3月」の売上を取り出すには、こう書きます。

=INDEX(B2:D5, MATCH("商品B", A2:A5, 0), MATCH("3月", B1:D1, 0))

行方向と列方向、どちらの検索も柔軟にできるのがINDEX+MATCHの強みです。XLOOKUPが使えない環境でも、この組み合わせなら同じことが実現できます。

VLOOKUPとの違い・使い分け

「VLOOKUPがあるならINDEX+MATCHは要らないのでは?」と思うかもしれません。実は、INDEX+MATCHにはVLOOKUPにない大きなメリットがあります。

比較項目VLOOKUPINDEX+MATCH
検索方向左端列のみ検索可能どの列でも検索可能
列の挿入・削除列番号がずれてエラーの原因になる範囲指定なので影響を受けにくい
処理速度データ量が多いと遅くなりやすいVLOOKUPより高速な場合がある
数式の読みやすさシンプルで直感的慣れるまでやや複雑

特に重要なのが検索方向です。VLOOKUPは検索値が左端列にないと使えませんが、INDEX+MATCHなら検索列と取得列を自由に指定できます。

たとえば「内線番号から名前を逆引きしたい」という場合、VLOOKUPでは対応できませんが、INDEX+MATCHなら簡単です。

=INDEX(A2:A4, MATCH(2001, C2:C4, 0))

結果は「佐藤」が返ります。検索列が右側にあっても問題なく動くのが、INDEX+MATCHの強みです。

VLOOKUPの詳しい使い方はこちらの記事で解説しています。

VLOOKUP関数を徹底解説!初心者でも使いこなせる完全ガイド

XLOOKUPとの使い分け

Excel for Microsoft 365やExcel 2021以降をお使いなら、XLOOKUP関数という新しい選択肢もあります。VLOOKUPの制限を解消した後継関数で、左方向の検索もスピルにも対応しています。

関数対応バージョン左方向検索数式のシンプルさ
VLOOKUP全バージョン×
INDEX+MATCH全バージョン
XLOOKUP365 / 2021以降

使い分けの目安は次のとおりです。

  • Excel 2021以降 or Microsoft 365 → XLOOKUPを第一候補に
  • Excel 2019以前も含めて使うファイル → INDEX+MATCHが安全
  • シンプルな左端検索だけ → VLOOKUPでもOK

XLOOKUPの詳しい使い方はこちらで解説しています。

XLOOKUP関数を徹底解説!基本から応用まで完全マスター

3つの関数をまとめて比較したい場合は、こちらの記事もあわせてどうぞ。

VLOOKUP・XLOOKUP・INDEX+MATCHを徹底比較

よくあるエラーと対処法

INDEX関数で発生しやすいエラーと、その原因・対処法をまとめました。

#REF! エラー

#REF! エラーは、行番号や列番号が配列の範囲を超えているときに発生します。

=INDEX(A2:C4, 5, 1)

この例では、A2:C4は3行しかないのに行番号に「5」を指定しているため、#REF! エラーになります。

対処法: 配列の行数・列数を確認してください。ROWS関数やCOLUMNS関数で範囲のサイズを確認すると安心です。

=ROWS(A2:C4)    → 3(行数)
=COLUMNS(A2:C4) → 3(列数)

#VALUE! エラー

#VALUE! エラーは、行番号や列番号に数値以外の値(文字列など)を指定した場合に発生します。

=INDEX(A2:C4, "二", 1)

対処法: 行番号・列番号には必ず数値を指定してください。セル参照を使っている場合は、参照先のセルが数値になっているか確認しましょう。

#N/A エラー(INDEX+MATCH連携時)

INDEX単体ではあまり出ませんが、MATCHと組み合わせたときに #N/A が出ることがあります。これはMATCH側で検索値が見つからなかったサインです。

=INDEX(C2:C4, MATCH("高橋", A2:A4, 0))

A列に「高橋」がいなければ、MATCHが #N/A を返し、そのままINDEXにも伝わってしまいます。

対処法: IFERROR関数でラップして、見つからなかった場合のメッセージを指定しておくと実務で使いやすくなります。

=IFERROR(INDEX(C2:C4, MATCH("高橋", A2:A4, 0)), "該当なし")

エラー値の種類と対処方法の詳細は、こちらの記事でまとめています。

セルに表示されるエラーの種類と原因、対処方法を解説

まとめ

この記事では、ExcelのINDEX関数について解説しました。ポイントを振り返っておきましょう。

  • INDEX関数は、行番号と列番号を指定して表から値を取り出す関数
  • 基本構文は =INDEX(配列, 行番号, [列番号])
  • MATCH関数との組み合わせで、検索値に対応するデータを柔軟に取得できる
  • 2方向のINDEX+MATCHなら、クロス表からの検索も可能
  • VLOOKUPでは対応できない「左方向の検索」や「逆引き」も可能
  • Excel 2021以降なら、より簡潔なXLOOKUPも選択肢に
  • #REF! は範囲外、#VALUE! は数値以外、#N/A はMATCH側の検索失敗が主な原因

INDEX+MATCHは最初はちょっと複雑に感じるかもしれませんが、パターンを覚えてしまえば応用が利く強力な組み合わせです。ぜひ実際のデータで試してみてください。

タイトルとURLをコピーしました