Home / Microsoft / Excel / ExcelのINDEX/MATCH関数が動かない・エラーになる原因と対処法

ExcelのINDEX/MATCH関数が動かない・エラーになる原因と対処法

※本ページにはプロモーション(広告)が含まれています

ExcelのINDEX/MATCH関数が動かない・エラーになる原因と対処法

「ExcelのINDEX/MATCH関数で#N/Aエラーが出る」「正しい値が返ってこない」「VLOOKUPからINDEX/MATCHに切り替えたらうまく動かない」──INDEX/MATCH関数はVLOOKUPより柔軟な検索ができますが、引数の指定や参照先のデータ型の問題で正しく動作しないことがあります。

この記事では、INDEX/MATCH関数がエラーになる原因と具体的な解決方法を解説します。

この記事でわかること

  • INDEX/MATCH関数の基本構文と仕組み
  • #N/Aエラーが出る主な原因
  • 数値と文字列の型不一致の解決方法
  • 完全一致・近似一致の使い分け
  • 複数条件でINDEX/MATCHを使う方法

INDEX/MATCH関数の基本構文

関数 構文 役割
MATCH =MATCH(検索値,検索範囲,照合の型) 検索値の位置(行番号)を返す
INDEX =INDEX(配列,行番号,列番号) 指定した位置のセル値を返す
INDEX/MATCH =INDEX(返す列,MATCH(検索値,検索列,0)) 条件に合う別列の値を取得

基本の組み合わせ:=INDEX(B:B,MATCH(E1,A:A,0))

(A列からE1の値を探して、同じ行のB列の値を返す)

INDEX/MATCHが動かない主な原因

原因1:MATCHの照合の型が正しくない

照合の型(第3引数)の指定を間違えると、見つかるべき値が見つからなかったり、間違った行番号が返ります。

  • 0:完全一致(最も一般的)
  • 1:以下の最大値(昇順ソート必須)
  • -1:以上の最小値(降順ソート必須)

原因2:数値と文字列の型不一致

検索値が数値なのに検索範囲が文字列として保存(または逆)されている場合に#N/Aエラーが発生します。

原因3:余分なスペースが含まれている

検索値または検索範囲に見えないスペースが含まれていると一致しません。

原因4:検索範囲とINDEX配列の行数が合っていない

MATCH関数の検索範囲とINDEX関数の配列(返す列)の範囲が異なる行数だと、正しい値が返りません。

原因5:絶対参照と相対参照の設定ミス

数式をコピーする際に参照がずれてしまうことで、エラーや誤った値が返ります。

対処法1:照合の型を0(完全一致)にする

手順

  1. MATCH関数の第3引数が0になっているか確認する
  2. 例:=INDEX(B:B,MATCH(E1,A:A,0))(第3引数は0)
  3. 1や省略になっている場合は0に変更する

対処法2:データ型を統一する

数値を文字列として検索する方法

=INDEX(B:B,MATCH(TEXT(E1,"0"),A:A,0))で検索値を文字列変換

文字列を数値として検索する方法

=INDEX(B:B,MATCH(E1*1,A:A,0))または=INDEX(B:B,MATCH(VALUE(E1),A:A,0))

データ型の確認方法

  1. セルを選択して数式バーで値を確認
  2. 数値は右揃え、文字列は左揃いになっていることが多い
  3. ISNUMBER関数で確認:=ISNUMBER(A1)がTRUEなら数値、FALSEなら文字列

対処法3:TRIM関数でスペースを除去する

検索値とデータ両方にTRIM関数を適用して比較します。

例:=INDEX(B:B,MATCH(TRIM(E1),TRIM(A:A),0))

⚠️ 配列数式として確定する場合はCtrl+Shift+Enterで確定してください。

対処法4:INDEXとMATCHの範囲を揃える

INDEXの配列とMATCHの検索範囲は、同じ行数・同じ開始行にする必要があります。

良い例

=INDEX(B2:B100,MATCH(E1,A2:A100,0))(どちらも2行目から100行目)

問題のある例

=INDEX(B:B,MATCH(E1,A2:A100,0))(INDEXは列全体、MATCHは2行目から → 行番号がずれる)

対処法5:絶対参照を使ってコピーに対応する

数式をコピーする場合は検索範囲と配列に$を使って絶対参照にします。

例:=INDEX($B$2:$B$100,MATCH(E1,$A$2:$A$100,0))

複数条件でINDEX/MATCHを使う

複数条件で検索したい場合はCTRL+SHIFT+ENTERで配列数式として入力します。

例(A列が「東京」かつB列が「2026」の行のC列を返す):

=INDEX(C:C,MATCH(1,(A:A="東京")*(B:B=2026),0))

⚠️ Ctrl+Shift+Enterで確定してください(Excelの中括弧{}が自動で付きます)。Excel 365ではCtrl+Shift+Enter不要で動作します。

よくある質問(FAQ)

Q. #REF!エラーが出ます。

A. INDEX関数の行番号または列番号が、指定した配列の範囲外になっています。MATCH関数が返した行番号が配列の行数を超えていないか確認してください。

Q. VLOOKUPと同じ結果にならない場合があります。

A. VLOOKUPはデフォルトで近似一致(照合の型=1)を使います。同じ結果を得るにはMATCHの第3引数を0(完全一致)にしてください。

Q. INDEX/MATCHはXLOOKUPと何が違いますか?

A. XLOOKUPはExcel 2021以降・Microsoft 365で使える新関数で、INDEX/MATCHより簡潔に書けます。古いExcelでの互換性が必要な場合はINDEX/MATCHを使用してください。

まとめ

エラー・症状 対処法
#N/Aエラー 照合の型を0に・型不一致の解消・スペース除去
間違った値が返る 範囲の行数を揃える・絶対参照を使う
#REF!エラー 行番号が範囲外になっていないか確認
複数条件で使いたい 配列数式(Ctrl+Shift+Enter)を使う

INDEX/MATCHが動かない場合、まずMATCHの第3引数が0(完全一致)になっているか確認し、次に検索値と検索範囲のデータ型が一致しているか確認してください。

Check Also

Excelのデータの入力規則が機能しない・設定できない原因と対処法【2026年最新版】

「ドロップダウンリストを設定し …