Excel の INDEX 関数と MATCH 関数:基本的な検索と高度な検索
Excel では、特定のデータを正確に取得することが頻繁に求められます。INDEX 関数と MATCH 関数はそれぞれ独自の強みを持っていますが、これらを組み合わせることで、データ検索のための非常に強力なツールセットが実現します。両関数を併用すれば、基本的な横方向・縦方向の検索はもちろん、双方向検索や大文字小文字を区別する検索、さらには複数条件による検索といった高度な機能まで幅広く活用できます。VLOOKUP よりも拡張性に優れたこの「INDEX+MATCH」の組み合わせにより、より柔軟で多様なデータ検索が可能になります。本チュートリアルでは、この2 つの関数が一体となって実現できる可能性を、さらに深く掘り下げていきます。
Excel で INDEX 関数と MATCH 関数を使用する方法
INDEX 関数と MATCH 関数を使う前に、まずはこれらの関数がどのようにして値の検索をサポートしてくれるのかを確認しておきましょう。
Excel で INDEX 関数を使用する方法
Excel のINDEX 関数は、指定された範囲内の特定の位置にある値を返す関数です。構文は次のとおりです。
- array(必須)は、値を取得する範囲を指定します。
- row_num(必須。ただし、)column_numが指定されている場合は除く)は、配列内の行番号を指定します。
- column_num(省略可。ただし、)row_numを省略する場合は必須)は、配列内の列番号を指定します。
たとえば、リストの6 番目の学生である Jeff の得点 6を調べるには、次のように INDEX 関数を使えます。
=INDEX(C2:C11,6)

√ 注:範囲 C2:C11は得点が記載されているセル範囲であり、数値 6は6 番目の学生の試験得点を示しています。
ここで簡単なテストをしてみましょう。数式 =INDEX(A1:C1,2)はどのような値を返すでしょうか?――はい、これは指定された行の2 番目の値、つまり生年月日を返します。
これで、INDEX 関数が横方向または縦方向の範囲で完璧に動作することがわかりました。しかし、複数の行と列を持つ広い範囲から値を取得する必要がある場合はどうすればよいでしょうか?そのような場合には、行番号と列番号の両方を指定する必要があります。たとえば、単一の列ではなくテーブル全体の範囲内でJeff の得点を調べるには、行番号6と列番号3を指定し、A2 から C11 までのセル範囲から次のように得点を特定できます。
=INDEX(A2:C11,6,3)

- INDEX 関数は、縦方向だけでなく横方向の範囲でも動作します。
- 両方の引数 row_numとcolumn_numを使用する場合、まずrow_numをcolumn_numより先に指定します。すると、INDEX 関数はそのrow_numとcolumn_numが交差する位置の値を返します。
ただし、行と列が多数存在する大規模なデータベースでは、正確な行番号と列番号を直接指定して数式を作成するのは明らかに不便です。こうした場面こそ、MATCH 関数を組み合わせるべきタイミングです。
Excel で MATCH 関数を使用する方法
Excel の MATCH 関数は、指定された範囲内で特定の項目がどの位置にあるかを示す数値を返します。MATCH 関数の構文は次のとおりです。
- lookup_value(必須)は、lookup_array 内で照合する値を指定します。
- lookup_array(必須)は、MATCH 関数が検索対象とするセル範囲を指定します。
- match_type(省略可):1、0、または-1。
- 1(デフォルト)の場合、MATCH 関数はlookup_value 以下の最大値を検索します。lookup_array 内の値は昇順で並べる必要があります。
- 0の場合、MATCH 関数はlookup_valueと完全に一致する最初の値を検索します。lookup_array 内の値は任意の順序で配置可能です。(一致タイプが0 に設定されている場合は、ワイルドカード文字も使用できます。)
- -1の場合、MATCH 関数はlookup_value 以上の最小値を検索します。lookup_array 内の値は降順で並べる必要があります。
たとえば、名前リスト内のVera の位置を知るには、「数式を区別する」機能を次のように使えます。
=MATCH("Vera",A2:A11,0)

※注:結果の「4」は、「Vera」という名前がリストの4 番目の位置にあることを示しています。
- MATCH 関数は、検索値そのものではなく、lookup_array 内での位置を返します。
- MATCH 関数は重複がある場合、最初に見つかった一致を返します。
- MATCH 関数は、INDEX 関数と同様に、縦方向および横方向の範囲で動作します。
- MATCH 関数は大文字と小文字を区別しません。
- 数式で区別する際、lookup_valueがテキスト形式の場合は、必ず引用符で囲んでください。
- 数式でlookup_valueがlookup_array 内に見つからない場合、#N/Aエラーが返されます。
これで、Excel における INDEX 関数と MATCH 関数の基本的な使い方がわかりました。次は、両関数を組み合わせて実際に活用してみましょう!
Excel で INDEX 関数と MATCH 関数を組み合わせる方法
下記の例を参考に、INDEX 関数と MATCH 関数をどのように組み合わせられるかご確認ください。
Evelyn の得点を検索する際、試験得点が3 列目にあることが分かっていれば、MATCH 関数で行位置を自動的に特定し、手動で数える手間を省けます。その後、特定された行と3 列目の交差点にある値を取得するために INDEX 関数を使いましょう。
=INDEX(A2:C11,MATCH("Evelyn",A2:A11,0),3)

この数式は少しだけ複雑に見えるかもしれませんが、各部分を順を追って確認していきましょう。

このINDEX 関数には3 つの引数があります。
- row_num:MATCH(「Evelyn」,A2:A11,0)は、範囲 A2:A11 内で"Evelyn"の位置を検索し、その行番号 5を返して、INDEX 関数に渡します。
- column_num:3は、配列内でスコアを検索する際に INDEX 関数に指定する3 列目を示します。
- array:A2:C11は、INDEX 関数に、指定された行と列の交差点にある一致する値をA2 から C11の範囲内で返すよう指示します。その結果、90が得られます。
上記の数式では、「Evelyn」というハードコードされた値を使用しています。しかし実際の業務では、別の学生の得点など異なるデータを検索するたびに数式を修正しなければならず、ハードコードは非現実的です。このようなケースでは、セル参照を使って動的な数式を作成できます。たとえば、ここでは「Evelyn」を F2 に変更します。
=INDEX(A2:C11,MATCH(F2,A2:A11,0),3)(AD)Kutools で検索をもっと簡単に:数式入力は一切不要!
Kutools for Excelのスーパー LOOKUPには、あらゆるニーズに対応した多彩な検索ツールが用意されています。複数条件での検索や複数シート間の検索、さらには一対多の検索が必要な場合でも、スーパー LOOKUPならわずか数回のクリックで作業を簡単にこなせます。これらの機能をぜひご確認ください。これにより、スーパー LOOKUPがあなたのExcel データとの関わり方を一変させます。複雑な数式を覚える手間から解放されましょう!

Kutools for Excel— 300 以上の必須ツールでExcel のパフォーマンスを大幅に向上させ、作業をより迅速かつ簡単に。さらに AI 機能を活用して、よりスマートなデータ処理と生産性の向上を実現します。今すぐ入手
双方向検索に INDEX と MATCH を適用する
前の例では列番号がわかっていたため、「数式を区別する」機能を使って行番号を特定しました。しかし、列番号もわからない場合は、どのように対応すればよいでしょうか?
このような場合は、MATCH 関数を2 つ使って双方向検索(マトリックス検索とも呼ばれます)が可能です。1 つは行番号を、もう1 つは列番号を特定します。たとえば、Evelyn の得点を調べるには、次の数式を使いましょう。
=INDEX(A2:C11,MATCH("Evelyn",A2:A11,0),MATCH("Score",A1:C1,0))

- 最初の数式は、リスト A2:A11 内で Evelyn の位置を検索し、その結果として得られる5を INDEX 関数の行番号として使用します。
- 2 番目の数式では、スコアの列を特定して、3を INDEX 関数の列番号として返します。
- この数式は=INDEX(A2:C11,5,3)に簡略化され、INDEX 関数は90を返します。
左方向検索に INDEX と MATCH を適用する
次に、Evelyn のクラスを特定する必要があるシナリオを考えてみましょう。すでにお気づきかもしれませんが、クラス列は名前列の左側にあります。このような場合、他の強力なExcel 検索関数である VLOOKUP では対応できません。
実際、左方向の検索が可能である点は、INDEX と MATCH の組み合わせが VLOOKUP を上回る大きな特長の一つです。
Evelyn のクラスを検索するには、次の数式を使って、B2:B11 から Evelyn を検索し、対応する値を A2:A11 から取得します。
=INDEX(A2:A11,MATCH("Evelyn",B2:B11,0))

注:特定の値を簡単に左方向に検索するには、右から左に検索機能をKutools for Excelでお試しください。この機能を使うには、Excel のKutoolsタブを開き、数式グループ内のスーパー LOOKUP>右から左に検索をクリックしてください。

Kutools for Excel— 300 以上の必須ツールでExcel をパワーアップ!作業がより迅速・簡単になり、さらに AI 機能を活用してスマートなデータ処理と生産性の向上を実現します。今すぐ入手
大文字小文字を区別する検索に INDEX と MATCH を適用する
MATCH 関数は本来、大文字と小文字を区別しません。しかし、数式で大文字と小文字を厳密に区別する必要がある場合は、EXACT 関数を組み込むことでその機能を強化できます。INDEX 数式内で MATCH 関数と EXACT 関数を組み合わせれば、以下のように大文字と小文字を区別した検索を効果的に実行できます。
- arrayは、値を返す範囲を指定します。
- lookup_valueは、大文字と小文字を区別して照合する値をlookup_array 内で指定します。
- lookup_arrayには、lookup_valueと比較するセル範囲を指定します。
たとえば、JIMMY の試験得点を調べるには、次の数式を使います。
=INDEX(C2:C11,MATCH(TRUE,EXACT("JIMMY",A2:A11),0))
√ 注:これは配列数式です。Ctrl+Shift+Enter で入力する必要があり、Excel 365 や Excel 2021 以降のバージョンを除き、この操作が必須です。

- EXACT 関数は、「JIMMY」をリスト内の値 A2:A11と比較します。この際、大文字と小文字が厳密に区別されます。2 つの文字列が完全に一致する場合(大文字・小文字も含めて)、EXACT 関数はTRUEを返します。一致しない場合はFALSEを返します。その結果、TRUE および FALSE の値からなる配列が得られます。
- 次に、MATCH 関数がその配列内で最初に出現する TRUE 値の位置を取得します。この位置は10になるはずです。
- 最後に、INDEX 関数が MATCH 関数が提供した10 番目の位置にある値を配列から取得します。
注:
- 数式を正しく入力するには、Ctrl + Shift + Enterを押してください。ただし、Excel 365、Excel 2021 以降のバージョンを使用している場合は、Enter キーを押すだけで済みます。
- 上記の数式は、単一のリストC2:C11 内を検索します。複数の列と行を持つ範囲(例:A2:C11)内で検索する場合は、INDEX 関数に列番号と行番号の両方を指定する必要があります。
-
=INDEX(A2:C11,MATCH(TRUE,EXACT("JIMMY",A2:A11),0),3) - この修正版の数式では、MATCH 関数を使って範囲 A2:A11 内から大文字・小文字を区別して「JIMMY」を検索し、一致するものがあれば、範囲 A2:C11の3 列目から対応する値を取得します。
最も近い値を検索するのに INDEX と MATCH を適用する
Excel では、データセット内の特定の値に最も近い値を見つける必要がある状況に遭遇することがあります。このようなケースでは、INDEX 関数と MATCH 関数に加えて ABS 関数および MIN 関数を組み合わせることで、非常に効果的に対応できます。
- arrayは、値を返す範囲を指定します。
- lookup_arrayは、lookup_valueに最も近い値を検索するための値の範囲を指定します。
- lookup_valueは、最も近い値を探すもとになる値を指定します。
たとえば、誰の得点が85 に最も近いかを調べるには、次の数式を使って、C2:C11 の範囲から85 に最も近い得点を検索し、その対応する名前を A2:A11 から取得します。
=INDEX(A2:A11,MATCH(MIN(ABS(C2:C11-85)),ABS(C2:C11-85),0))
√ 注:これは配列数式です。Ctrl+Shift+Enter で入力する必要があります(Excel 365 および Excel 2021 以降のバージョンを除く)。

- ABS(C2:C11-85)は、範囲 C2:C11 内の各値と85との絶対差を計算し、絶対差分配列を生成します。
- MIN(ABS(C2:C11-85))は、絶対差分配列から最小値を抽出します。この値こそ、85 に最も近い数値との差分を表しています。
- MATCH 関数 MATCH(MIN(ABS(C2:C11-85)),ABS(C2:C11-85),0)は、次に絶対差分配列内で最小の絶対差分が現れる位置を特定します。この位置は10となるはずです。
- 最後に、INDEX 関数がA2:A11リスト内で、範囲 85に最も近いスコアに対応する位置の値をC2:C11から取得します。
注:
- 数式を正しく入力するには、Ctrl + Shift + Enterを押してください。ただし、Excel 365やExcel 2021 以降のバージョンを使用している場合は、Enter キーを押すだけで済みます。
- 同点の場合は、この数式が最初に一致した値を返します。
- 平均スコアに最も近い値を見つけるには、数式内の85をAVERAGE(C2:C11)に置き換えましょう。
複数条件による検索に INDEX と MATCH を適用する
複数の条件を満たす値を検索する必要があり、2 つ以上の列を横断して検索しなければならない場合は、次の数式を使用してください。この数式により、異なる列にわたって複数の条件を指定し、すべての条件を満たす目的の値を検索できます。
√ 注:これは配列数式です。Ctrl+Shift+Enterで入力すると、数式バーに中括弧のペアが表示されます。
- arrayは、値を返す範囲を指定します。
- (lookup_value=lookup_array)は単一の条件を表します。この条件では、特定のlookup_valueがlookup_array 内の値と一致するかどうかをチェックします。
たとえば、クラス A のココさんで誕生日が7/2/2008の方のスコアを検索するには、次のような数式を使用できます。
=INDEX(D2:D11,MATCH(1,(G2=A2:A11)*(G3=B2:B11)*(G4=C2:C11),0))

注:
- この数式では、値を直接コードに記述する必要がなく、セルG2、G3、およびG4の値を変更するだけで、異なる情報に基づくスコアを簡単に取得できます。
- この数式を入力する際は、Ctrl + Shift + Enterを押してください。ただし、Excel 365やExcel 2021 以降のバージョンでは、Enter キーを押すだけで済みます。
もし Ctrl + Shift + Enter を頻繁に忘れてしまい、誤った結果が得られる場合は、以下のやや複雑な数式をご利用ください。これなら、通常のEnter キーで完了できます:=INDEX(D2:D11,MATCH(1,INDEX((G2=A2:A11)*(G3=B2:B11)*(G4=C2:C11),0,1),0)) - これらの数式は複雑で、覚えるのが難しい場合があります。手動で数式を入力することなく、複数条件の検索を簡単に実現したいなら、Kutools for Excelの検索 - 複数条件検索機能をご活用ください。Kutools をインストール後、Excel のKutoolsタブに移動し、スーパー LOOKUP > 検索 - 複数条件検索を数式グループ内でクリックしてください。
Kutools for Excel — 300 以上の必須ツールでExcel のパフォーマンスを大幅に向上させ、作業をより迅速かつ簡単に。さらに AI 機能を活用して、スマートなデータ処理と生産性の飛躍的な向上を実現します。今すぐ入手
複数の列にわたる検索に INDEX 関数と MATCH 関数を使用する
複数のデータ列を扱うシナリオを考えてみましょう。最初の列はキーとして機能し、他の列のデータを分類します。特定のエントリのカテゴリや分類を特定するには、データ列全体を検索し、参照列内の該当するキーと関連付ける必要があります。
たとえば、以下の表で、生徒のショーンさんをそのクラスと一致させるにはどうすればよいでしょうか?INDEX 関数と MATCH 関数を使えば数式で実現できますが、その数式は非常に長く、理解するのはもちろん、記憶したり入力したりするのは困難です。
=IFERROR(INDEX($A$2:$A$4,MATCH(IF(SUM(MMULT(--($B$2:$E$4=G2),TRANSPOSE(COLUMN($B$2:$E$4)^0)))>0,1,-1),MMULT(--($B$2:$E$4=G2),TRANSPOSE(COLUMN($B$2:$E$4)^0))^0,0)), "")

ここで役立つのが、Kutools for Excelの複数の列をインデックスとマッチします機能です。この機能を使えば、特定のエントリを対応するカテゴリに素早く簡単に一致させることができます。この強力なツールでショーンさんのクラスを手軽に一致させるには、まずKutools for Excel アドインをダウンロードしてインストールし、次のように操作してください。
- 一致するクラスを表示する目的のセルを選択します。
- Kutoolsタブで、関数ヘルパー > 検索と参照 > 複数の列をインデックスとマッチしますをクリックしてください。

- 表示されたダイアログボックスで、次のように操作します:
- 最初の
ボタンをLookup_colの横でクリックし、返したいキー情報(ここではクラス名)を含む列を選択してください。(選択できるのは単一の列のみです。) - 2 番目の
ボタンをTable_rngの横でクリックし、選択したLookup_col 内の値(ここでは学生名)と照合するセル範囲を指定してください。 - 3 番目の
ボタンをLookup_valueの横でクリックし、クラスと照合したい学生名(ここでは Shawn)が含まれるセルを選択します。 - OKをクリックしてください。

- 最初の
結果
Kutools が自動的に数式を生成し、ショーンさんのクラス名が即座に目的のセルに表示されます。

注:「複数の列をインデックスとマッチします」機能を試すには、コンピューターにKutools for Excel がインストールされている必要があります。まだインストールされていない場合は、今すぐダウンロードしてインストールしてください。今日からExcel をもっとスマートに使いましょう!
最初の空白以外の値を検索するための INDEX 関数と MATCH 関数
列または行からエラーを無視して最初の空白以外の値を取得するには、INDEX 関数と MATCH 関数に基づいた数式を使用できます。ただし、範囲内のエラーを無視したくない場合は、ISBLANK 関数を追加してください。
- エラーを無視して列または行で最初の非空白セルの値を取得する:
-
=INDEX(B4:B15,MATCH(TRUE,INDEX((B4:B15<>0),0),0)) - エラーを含めて列または行で最初の非空白セルの値を取得する:
-
=INDEX(B4:B15,MATCH(FALSE,ISBLANK(B4:B15),0))
注:
- 上記は配列数式です。Ctrl+Shift+Enterを押して入力する必要がありますが、Excel 365 およびExcel 2021 以降のバージョンではその必要はありません。
- 詳細な説明については、次のチュートリアルをご覧ください:列または行で最初の非空白セルの値を取得する。
最初の数値を検索するための INDEX 関数と MATCH 関数
列または行から最初の数値を取得するには、INDEX 関数、MATCH 関数、および ISNUMBER 関数に基づいた数式を使用します。
=INDEX(B4:B15,MATCH(TRUE,ISNUMBER(B4:B15),0))

注:
- これは配列数式です。Ctrl+Shift+Enterを押して入力してください。ただし、Excel 365 およびExcel 2021 以降のバージョンでは、この操作は不要です。
- 詳細な説明については、次のチュートリアルをご覧ください:列または行で最初の数値を取得する。
最大値または最小値に関連付けられた値を検索するための INDEX 関数と MATCH 関数
範囲内で最大値または最小値に関連付けられた値を取得する必要がある場合は、MAX 関数または MIN 関数を INDEX 関数および MATCH 関数と組み合わせて使用できます。
- 最大値に関連付けられた値を取得するための INDEX 関数と MATCH 関数:
- =INDEX(array, MATCH(MAX(lookup_array), lookup_array, 0))
- 最小値に関連付けられた値を取得するための INDEX 関数と MATCH 関数:
- =INDEX(array, MATCH(MIN(lookup_array), lookup_array, 0))
- 上記の数式には2 つの引数があります:
- arrayは、関連情報を取得したいセル範囲を指します。
- lookup_arrayは、特定の条件(たとえば最大値や最小値など)に基づいて検索・評価される値のセットを表します。
たとえば、誰が最も高いスコアを持っているかを調べるには、次の数式を使いましょう。
=INDEX(A2:A11,MATCH(MAX(C2:C11),C2:C11,0))

- MAX(C2:C11)は、範囲 C2:C11 内の最大値を検索します。この値は96です。
- 次に、MATCH 関数が配列 C2:C11 内で最大値の位置を特定します。この位置は1となるはずです。
- 最後に、INDEX 関数がリストの1 番目の値をA2:A11から取得します。
注:
- 上記の例のように、複数の学生が同じ最高得点を取得するなど、最大値(または最小値)が複数存在する場合、この数式は最初に一致した値を返します。
- 最も低い得点を取得した人物を特定するには、次の数式を使用します:
=INDEX(A2:A11,MATCH(MIN(C2:C11),C2:C11,0))
ヒント:独自の#N/A エラーメッセージをカスタマイズできます
Excel の INDEX 関数と MATCH 関数を使用する際、一致する結果がない場合に#N/A エラーが発生することがあります。たとえば、以下の表でサマンサという名前の生徒のスコアを検索しようとすると、データセット内に彼女が存在しないため#N/A エラーが表示されます。

スプレッドシートをよりユーザーフレンドリーにするには、IFNA 関数で INDEX 数式を囲み、このエラーメッセージをカスタマイズできます。
=IFNA(INDEX(C2:C11,MATCH(F2,A2:A11,0)),"Not found")

注:
- 「Not found」の部分を任意のテキストに置き換えるだけで、エラーメッセージを簡単にカスタマイズできます。
- #N/A エラーだけでなくすべてのエラーを処理したい場合は、IFNA 関数の代わりにIFERROR 関数を使用することを検討してください:
=IFERROR(INDEX(C2:C11,MATCH(F2,A2:A11,0)),"Not found")すべてのエラーを抑制するのは推奨されません。エラーは数式内の潜在的な問題を警告する役割を果たすためです。
以上が、Excel における INDEX 関数と MATCH 関数に関するすべての関連コンテンツです。このチュートリアルがお役に立てれば幸いです!さらに多くのExcel ヒントやテクニックを知りたい方は、こちらをクリックしてください。数千件以上のチュートリアルを集めた豊富なコレクションをぜひご活用ください!
最高のオフィス生産性ツール
Kutools for Excel - あなたを群衆から際立たせます
| 🤖 | KUTOOLS AI アシスト:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー VLookup:複数条件 | 複数値 | 複数シート間 | ファジーマッチ... | |
| 高度なドロップダウンリスト:簡単なドロップダウンリスト | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト... | |
| 列マネージャー:指定した数の列を追加 | 列の移動 | 非表示列の表示状態を切り替え |列を比較して同じ/異なるセルを選択... | |
| 注目の機能:グリッドフォーカス | デザインビュー | 強化された数式バー | ワークブック&シートマネージャー|リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線…) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除…)| 50+チャートタイプ(ガントチャート…)| 40+実用的な数式(誕生日に基づいて年齢を計算します…)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入…)| 12 変換ツール(単語に変換する、為替レートの変換…)| 7 結合と分割ツール(高度な行のマージ、Excel セルを分割…)|…他にも多数 |
Kutools for Excel には300 以上の機能があり、必要な機能が常にワンクリックで利用できます…
Office Tab - Microsoft Office(Excel を含む)でタブによる読み書きを有効化
- 開いている数十のドキュメントを1 秒で切り替え!
- 毎日何百回ものマウスクリックを削減し、マウス手首の悩みともおさらばしましょう。
- 複数のドキュメントを閲覧・編集する際の生産性が50% 向上します。
- Chrome、Edge、Firefox のような高効率な Tabs を Office(Excel を含む)にもたらします。


