【エクセル】INDEX関数の使い方を詳しく紹介。MATCH関数と組み合わせて値を抽出する方法

エクセルのINDEX関数の使い方とMATCH関数と組み合わせる方法

Microsoft Excel(エクセル)の関数の中でも、INDEX関数は非常に便利な関数の一つです。

INDEX関数は、指定された行と列が交差する位置にあるセルの値を抽出する関数です。

以下のリンク記事でINDEX関数のことについて少し触れましたが、この記事では、INDEX関数の使い方や書式、実例などを基本から応用まで幅広く紹介していきます。

INDEX関数で出来ること

INDEX関数って何ができるんだろう?と思う人は多いでしょう。

INDEXの読み方は”インデックス”で、日本語で「索引(さくいん)」や「見出し」を意味しています。

エクセルのINDEX関数は、指定した行と列が交差するセルの値を抽出する関数です。

VLOOKUP関数やHLOOKUP関数と同じ機能では?と思った方もいるかもしれません。

そのとおりですが、INDEX関数は、MATCH関数と組み合わせて使用することで、VLOOKUP関数より簡単に条件を設定することができる便利な関数です。

⇩INDEX関数の使用イメージ

G9セルに「=INDEX(B2:E9,G3,H3)」を入力し、表の5行目、3列目のセルの値「780」を抽出しています。

INDEX関数の紹介(表から値を抽出)
INDEX関数の基本的な使い方の紹介(表から値を抽出)

INDEX関数の書式と引数

ここからは、INDEX関数を詳しく紹介していきます。

まずは、使い方の基本となる書式と引数ですが、INDEX関数は特殊な関数で、「配列形式」と「セル範囲形式」という2つの書式があります。

ただ、皆さんが利用するのは「配列形式」だと考えて問題ありません。「セル範囲形式」の書式や使い方も紹介しますが、かなり特殊な使い方となります。

INDEX関数の書式は2つ

1.「配列形式」 ※基本はこちらを使用

2.「セル範囲形式

「配列形式」の書式と引数

INDEX関数の「配列形式」の書式は以下のとおりで、「配列」「行番号」「列番号」の3つの引数を指定する必要があります。

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

第1引数「配列」:入力必須で、検索したいセル範囲を指定します。セル範囲が 1 行(列)だけの場合は、それぞれ行番号または列番号を省略することができます。(例:A1:C12,B:B)

第2引数「行番号」:入力必須です。第1引数「配列」のセル範囲内の上から何番目の位置を抽出したいか数値で指定します。第1引数「配列」が1行のときは省略可能です。「0」を入力すると、列全体のデータが抽出されます。(例:3、G4、0)

第3引数「列番号」:入力は任意です。第1引数「配列」のセル範囲内の左から何番目の位置を抽出したいか数値で指定します。第1引数「配列」が1列のときは省略可能です。「0」を入力すると、行全体のデータが抽出されます。(例:5、G5、0)

「セル範囲形式」の書式と引数

INDEX関数の「セル範囲形式」の書式は以下のとおりで、「参照」「行番号」「列番号」「領域番号」の4つの引数を指定する必要があります。

上記で説明しましたが、この形式でINDEX関数を利用するのは稀なので、まずは「配列方式」を覚えるようにしましょう。

=INDEX(参照,行番号, [列番号],[領域番号])

第1引数「参照」:入力必須で、検索したいセル範囲を1つ、または複数の範囲を指定します。複数の範囲を指定する場合、「(A1:C6, A8:C11)」というように、カッコで囲って、「,」で区切ります。(例:(A1:C6, A8:C11)、A1:C6)

第2引数「行番号」:入力必須です。第1引数「参照」のセル範囲内の上から何番目の位置を抽出したいか数値で指定します。第1引数「参照」が1行のときは省略可能です。「0」を入力すると、列全体のデータが抽出されます。(例:3、G4、0)

第3引数「列番号」:入力は任意です。第1引数「参照」のセル範囲内の左から何番目の位置を抽出したいか数値で指定します。第1引数「参照」が1列のときは省略可能です。「0」を入力すると、行全体のデータが抽出されます。(例:5、G5、0)

第4引数「領域番号」:省略可能です。第1引数「参照」でセル範囲を複数選択した場合、何番目のセル範囲(=領域)から値を抽出したいかを数値で指定します。(例:1、2)

INDEX関数の基本的な使い方

続いて、INDEX関数の基本的な使い方を、「配列形式」と「セル範囲形式」でそれぞれ1つずつ紹介します。

INDEX関数を「配列形式」で使う方法

それでは、表の中から、「D店のシャンプーの値段」を検索して抽出する方法と手順を紹介します。

まずは、INDEX関数をG9セルに挿入し、第1引数「配列」に検索したいセル範囲を指定します。

=INDEX(B2:E9,

INDEX関数を挿入し第1引数「配列」を指定
INDEX関数を挿入し第1引数「配列」を指定

続いて、第2引数「行番号」を指定します。D店は表の5行目にあるので、「5」を入力するか、5が入力されたG3セルを指定します。

=INDEX(B2:E9,G3,

INDEX関数の第2引数「行番号」を指定
INDEX関数の第2引数「行番号」を指定

最後に、第3引数「列番号」を指定します。シャンプーの値段は表の3列目にあるので、「3」を入力するか、3が入力されたH3セルを指定します。

=INDEX(B2:E9,G3,H3)

INDEX関数の第3引数「列番号」を指定
INDEX関数の第3引数「列番号」を指定

INDEX関数をEnterキーを押して確定すると、「D店のシャンプーの値段」である760円を抽出することが出来ました。

INDEX関数で表から値を抽出
INDEX関数で表から値を抽出

INDEX関数を「セル範囲形式」で使う方法

INDEX関数を「セル範囲形式」で使う方法を紹介します。

「セル範囲形式」は、検索するセル範囲が複数に分かれている場合に使用する方法です。

今回は説明用に、下の表1と表2の2つの領域から、上から2行目で左から4列目のセルの値を抽出する方法と手順を紹介します。

INDEX関数を「セル範囲形式」で使う方法は?
INDEX関数を「セル範囲形式」で使う方法は?

まずは、INDEX関数をH11セルに挿入し、第1引数「参照」に検索したいセル範囲を複数指定します。複数の範囲を指定する場合、「(B2:E5, B8:E11)」というように、カッコで囲って、「,」で区切ります。

=INDEX((B2:E5,B8:E11),

INDEX関数で離れた2つのセル範囲を指定
INDEX関数で離れた2つのセル範囲を指定

続いて、第2引数「行番号」と第3引数「列番号」を指定します。表から2行目で4列目のセルの値を抽出するために、G6セルとH6セルを指定します。

=INDEX((B2:E5,B8:E11),G6,H6,

INDEX関数の行番号と列番号を指定
INDEX関数の行番号と列番号を指定

領域2のセル範囲からデータを抽出したい場合は、第4引数「領域番号」に「2」と入力します。そうすると、表2から2行目で4列目のセルの値「1,800」円を抽出することができます。

=INDEX((B2:E5,B8:E11),G6,H6,2)

INDEX関数で領域2からデータを抽出
INDEX関数で領域2からデータを抽出

もし、領域1のセル範囲からデータを抽出したい場合は、第4引数「領域番号」を「1」に変更します。そうすると、表1から2行目で4列目のセルの値「1,200」円を抽出することができます。

=INDEX((B2:E5,B8:E11),G6,H6,1)

INDEX関数で領域番号を「1」に変更して値を抽出
INDEX関数で領域番号を「1」に変更して値を抽出

INDEX関数を使った事例を紹介

INDEX関数はMATCH関数など他の関数と組み合わせて効果を発揮します。

ここからは、INDEX関数を使った事例を3つ紹介します。

INDEX関数とMATCH関数で表から値を抽出

INDEX関数とMATCH関数を組み合わせることで、VLOOKUP関数より簡単に表から値を抽出することができます。

MATCH関数は、探したい値が表の何行目(何列目)にあるのかを数値で表示することが出来る関数です。

下のように、『=MATCH(B6,B2:E2,0)』のように使い、左(もしくは上)から何番目に検索値があるかを数値で表示します。

MATCH関数の基本的な使い方
MATCH関数の基本的な使い方

MATCH関数の使い方を詳しく知りたい方は、以下の記事も参考にしてください。

それでは、INDEX関数とMATCH関数を使って、表から『B店のシャンプー』の値段を自動でクロス抽出する方法を解説します。

手順1.INDEX関数の第1引数「配列」を指定

クロス抽出した結果を表示したいセルに、INDEX関数を挿入します。第1引数「配列」に値を見つけ出したいセル範囲を選択します。この際、見出し行は検索範囲に含めません。

=INDEX(B4:E10,

INDEX関数の第1引数「配列」を指定
INDEX関数の第1引数「配列」を指定

手順2.INDEX関数の第2引数「行番号」を指定

INDEX関数の第2引数「行番号」にMATCH関数を挿入します。MATCH関数の第1引数「検索値」は『抽出したい店舗』のセル(G4)を指定し、第2引数「検索条件」は表の「店舗列」のセル範囲(B4:B10)を指定します。

=INDEX(B4:E10,MATCH(G4,B4:B10,0),

INDEX関数の第2引数「行番号」にMATCH関数を挿入
INDEX関数の第2引数「行番号」にMATCH関数を挿入

手順3.INDEX関数の第3引数「列番号」を指定

続いて、INDEX関数の第3引数「列番号」にもMATCH関数を挿入します。MATCH関数の第1引数「検索値」は『抽出したい商品』のセル(H4)を指定し、第2引数「検索条件」は表の見出しのセル範囲(B3:E3)を指定します。INDEX関数の引数を全て指定し終えたので、”)”で閉じます。

=INDEX(B4:E10, MATCH(G4,B4:B10,0), MATCH(H4,B3:E3,0))

INDEX関数の第3引数「列番号」にMATCH関数を挿入
INDEX関数の第3引数「列番号」にMATCH関数を挿入

手順4.INDEX関数の結果を確認

Enterキーで関数を確定します。そうすると、「B店のシャンプーの値段」720円を探し出すことができました。

INDEX関数とMATCH関数でクロス抽出が完了
INDEX関数とMATCH関数でクロス抽出が完了

手順5.検索値を変更

G4セルを「E店」にH3セルを「石鹸」に変更しても、条件にあった値段340円が自動でクロス抽出されます。このように、MATCH関数とINDEX関数を組み合わせると、引数の変更が不要なため非常に便利です。

検索条件を変更した結果
検索条件を変更した結果

今回はVLOOKUP関数の代わりにINDEX関数を利用しましたが、同様にXLOOKUP関数やHLOOKUP関数の代わりに利用することも可能ですので試してみてください。

INDEX関数とMATCH関数を複数条件で利用

上記で紹介したとおり、INDEX関数はMATCH関数と組み合わせることで、VLOOKUP関数より便利に表から検索値を抽出することができます。

INDEX関数とMATCH関数は、複数条件で利用することもできます。

今回は、下の表から「大阪府」の「A店」の「目薬」の値段を抽出する方法を紹介します。

INDEX関数とMATCH関数を複数条件で利用する方法
INDEX関数とMATCH関数を複数条件で利用する方法

手順1.表に「キー」列を追加(2つの文字列を結合)

「販売店」の右に新規に列(キー列)を追加し、「地域」と「販売店」の文字列を「&」演算子を利用して文字を結合します。

=B3&C3

INDEX関数とMATCH関数を複数条件で利用する手順(キー列を追加)
INDEX関数とMATCH関数を複数条件で利用する手順(キー列を追加)

手順2.INDEX関数の第1引数を指定

INDEX関数をI9セルに挿入し、第1引数「配列」に検索したいセル範囲を指定します。セル範囲は手順1で作成したキー列から右側のセル範囲を選択します。

=INDEX(D4:F10,

INDEX関数とMATCH関数を複数条件で利用する手順(セル範囲を指定)
INDEX関数とMATCH関数を複数条件で利用する手順(セル範囲を指定)

手順3.INDEX関数の第2引数「行番号」を指定

続いて、INDEX関数の第2引数「行番号」にMATCH関数を挿入します。キー列の中に検索値が何行目になるかをMATCH関数で調べたいので、第1引数は、「地域」と「販売店」が入力されているH4セルとI4セルを&演算子で結合します。

=INDEX(D4:F10,MATCH(H4&I4,D4:D10,0),

INDEX関数とMATCH関数を複数条件で利用する手順(MATCH関数に&演算子を挿入)
INDEX関数とMATCH関数を複数条件で利用する手順(MATCH関数に&演算子を挿入)

手順4.INDEX関数の第3引数「列番号」を指定

続いて、INDEX関数の第3引数「列番号」にもMATCH関数を挿入します。MATCH関数の第1引数「検索値」は『探したい商品名』のセル(J4)を指定し、第2引数「検索条件」は表の見出しのセル範囲(D3:F3)を指定します。

=INDEX(D4:F10,MATCH(H4&I4,D4:D10,0),MATCH(J4,D3:F3,0))

INDEX関数とMATCH関数を複数条件で利用する手順(列番号を指定)
INDEX関数とMATCH関数を複数条件で利用する手順(列番号を指定)

手順5.INDEX関数の結果を確認

EnterキーでINDEX関数を確定します。そうすると、「大阪府のA店の目薬の値段」1,800円を検索することができました。

INDEX関数とMATCH関数を複数条件で利用する手順(検索値が抽出)
INDEX関数とMATCH関数を複数条件で利用する手順(検索値が抽出)

手順6.検索値を変更

H4、I4、J4セルの検索条件を「東京都、B店、シャンプー」に変更しても、条件にあった値段720円が自動でクロス抽出されます。

INDEX関数とMATCH関数を複数条件で利用する手順(検索値を変更)
INDEX関数とMATCH関数を複数条件で利用する手順(検索値を変更)

INDEX関数とSUM関数を組み合わせる

INDEX関数とSUM関数を組み合わせて使用することもできます。

SUM関数の引数の中にINDEX関数して、D3セルの値段からG2セルに入力した番号の値段までの合計を集計することができます。

=SUM(D3:INDEX(B3:D9,G2,3))

INDEX関数とSUM関数を組み合わせた事例
INDEX関数とSUM関数を組み合わせた事例

そうすると、1番から4番までの合計値「800」円を表示させることができました。

INDEX関数とSUM関数を組み合わせた事例(1~4番まで合計)
INDEX関数とSUM関数を組み合わせた事例(1~4番まで合計)

G2セルの数値を「7」に変更すると、D列の1番~7番までの値段を合計することができます。

INDEX関数とSUM関数を組み合わせた事例(1~7番まで合計)
INDEX関数とSUM関数を組み合わせた事例(1~7番まで合計)