更新日:、 作成日:

エクセル INDEX 関数:セルの範囲から指定した行と列の位置にあるセルを取得する

はじめに

エクセルの INDEX 関数の使い方を紹介します。

INDEX 関数はセルの範囲から指定した行と列の位置にあるセルを取得します。

=INDEX(A1:B3,1,2) のようにして、セルの範囲の 1 行目と 2 列目のセル「B1」を取得できます。

=INDEX(A1:B3,2,1) のようにして、セルの範囲の 2 行目と 1 列目のセル「A2」を取得できます。

=INDEX(FILTER(…),1,0) のようにして、他の関数の結果の 1 行目とすべての列を取得できます。

基準のセルから上下左右に移動した位置のセルを取得するには「OFFSET 関数」を使用します。
INDEX と MATCH 関数を組み合わせて好きな列や行から検索するには「INDEX と MATCH 関数を組み合わせる」をご覧ください。

INDEX 関数の引数

INDEX(範囲, 行番号)
INDEX(範囲, 列番号)
INDEX(範囲, 行番号, 列番号)
範囲の中から行番号列番号の交差するセル参照を取得します。

引数「範囲」対象となるセルの範囲を指定します。
引数「行番号」省略できるときと、できないときがあります。省略すると 0 が指定されます。
引数「範囲」の何行目のセルを取得するか指定します。
0 を指定するとすべての行を取得します。
スピル化
引数「列番号」省略できるときと、できないときがあります。省略すると 0 や 1 が指定されます。
引数「範囲」の何列目のセルを取得するか指定します。
0 を指定するとすべての列を取得します。
スピル化

INDEX((範囲1,範囲2 …), 行番号, 列番号, 領域番号)
領域番号に対応する範囲の中からセル参照を取得します。

引数「範囲」上記と同じです。
引数「行番号」上記と同じです。スピル化
引数「列番号」上記と同じです。スピル化
引数「領域番号」省略できます。省略すると引数「範囲1」を使用します。
使用する引数「範囲」の番号を指定します。
スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

結果がセルの範囲になるときは、セルの範囲や配列を指定してもその通りにはスピルされません。

使い方をわかりやすく

INDEX 関数の引数に何を指定するのかわかりやすく解説します。

=INDEX(範囲, 行番号, 列番号)

引数「範囲」、どこから取得しますか?

次のようなデータがあります。この中から何を取得したいですか?

17

セル「C3」の 365 を取得するなら、それが含まれる範囲を引数「範囲」に指定します。

=INDEX(B3:D5
18

引数「行番号」、範囲の中の何行目ですか?

セル「C3」が引数「範囲」の中の何行目にあるか指定します。

=INDEX(B3:D5,1
19

引数「範囲」の一番上の行を基準とした 1 からの連番です。セル「B3」なら 1、セル「B4」なら 2 です。

引数「列番号」、範囲の中の何列目ですか?

セル「C3」が引数「範囲」の中の何列目にあるか指定します。

=INDEX(B3:D5,1,2)
20

引数「範囲」の一番左の列を基準とした 1 からの連番です。セル「B3」なら 1、セル「C3」なら 2 です。

これで交差するセル「C3」を取得できます。

使い方

INDEX 関数の使い方を紹介します。

結果がセルの範囲のときは複数のセルに表示されます。これはスピルという機能によるものです。詳しくは「スピル、動的配列数式の使い方」をご覧ください。

各行の 3 列目の値を取得する

セルの範囲「B3」~「D7」の各行の値を取得します。値は 3 列目です。

=INDEX($B$3:$D$7,B10,3)
10

各列の 1 行目の値を取得する

セルの範囲「B3」~「D7」の 1 行目の各列の値を取得します。

=INDEX($B$3:$D$7,1,B10)
11

すべての行を取得する

すべての行の名前を取得します。名前は 1 列目です。

=INDEX($B$3:$D$5,0,1)
=INDEX($B$3:$D$5,0,2)

結果はセルの範囲なので、2019 以前のバージョンでも「SUM 関数」などに使用できます。

12

スピル」できない 2019 以前のバージョンで、すべての行を表示するには次のようにします。

1 列目のすべての行を表示するには、引数「行番号」に「ROW 関数」を使用して、行番号を 1 からの連番にできます。

=INDEX($B$3:$D$5,ROW(B3)-2,1)
=INDEX($B$3:$D$5,ROW(B3)-2,2)

結果を下方向にコピーします。

13

ROW(B3)-2 のようにして、行「3」を基準に 1 からの連番にできます。

行「4」を基準にするには ROW(B4)-3 のように、引き算する値が増えます。

すべての列を取得する

1 行目のすべての列を取得します。

=INDEX($B$3:$D$7,1,0)
=INDEX($B$3:$D$7,2,0)

結果はセルの範囲なので、2019 以前のバージョンでも「SUM 関数」などに使用できます。

14

スピル」できない 2019 以前のバージョンで、すべての列を表示するには次のようにします。

1 行目のすべての列の値を表示します。引数「列番号」に「COLUMN 関数」を使用して、列番号を 1 からの連番にできます。

=INDEX($B$3:$D$5,1,COLUMN(B3)-1)
=INDEX($B$3:$D$5,2,COLUMN(B3)-1)

結果を右方向にコピーしています。

15

COLUMN(B3)-1 のようにして、列「B」を基準に 1 からの連番にできます。

列「C」を基準にするには COLUMN(C3)-2 のように、引き算する値が増えます。

領域番号の範囲から取得する

各領域の 1 行目と1 列目の値を取得します。名前が 領域1、バージョンが 領域2、値が 領域3 です。

=INDEX(($B$3:$B$5,$C$3:$C$5,$D$3:$D$5),1,1,B8)
16

高度な使い方

INDEX 関数と「MATCH 関数」を組み合わせて、好きな列や行から検索できます。見出しでも検索できます。

365 または 2021 からは「XLOOKUP 関数」を使用します。
詳しくは「INDEX と MATCH 関数を組み合わせる」をご覧ください。

好きな列を検索して値を取得する

INDEX 関数の引数「行番号」に「MATCH 関数」を組み合わせて、好きな列から検索できます。「XLOOKUP 関数」からも検索できます。

=INDEX($B$3:$E$5,MATCH(B8,$C$3:$C$5,0),1)
=XLOOKUP(B9,$C$3:$C$5,$B$3:$B$5)

VLOOKUP 関数」は左端の列からしか検索できません。

6

好きな行を検索して値を取得する

INDEX 関数の引数「列番号」に「MATCH 関数」を組み合わせて、好きな行から検索できます。「XLOOKUP 関数」からも検索できます。

=INDEX($C$2:$E$5,1,MATCH(B8,$C$3:$E$3,0))
=XLOOKUP(B9,$C$3:$E$3,$C$2:$E$2)

HLOOKUP 関数」は上端の行からしか検索できません。

8

見出しを検索して値を取得する

INDEX 関数と「MATCH 関数」を組み合わせて、行見出しと列見出しを検索して交差するセルを取得します。「XLOOKUP 関数」からも検索できます。

=INDEX(C3:E5,MATCH(B7,B3:B5,0),MATCH(C7,C2:E2,0))
=XLOOKUP(B7,B3:B5,XLOOKUP(C7,C2:E2,C3:E5))
10

最初の行だけ抽出する

FILTER 関数」のようにセルの範囲や配列を取得する関数と組み合わせて、その最初の行だけ取得できます。

値が 30 以上の最初の行を抽出します。INDEX 関数の引数「行番号」に何行目を取得するか指定できます。

=INDEX(FILTER(B3:D7,D3:D7>=30),1,0)
=INDEX(FILTER(B3:D7,D3:D7>=30),2,0)
=FILTER(B3:D7,D3:D7>=30)
19

解説

引数の種類がいろいろありますが、通常は =INDEX(範囲, 行番号, 列番号) の形式を使用します。

引数「行番号」と引数「列番号」を必ず入力します。

引数「行番号」は、引数「範囲」の一番上の行を基準とした 1 からの連番です。

引数「行番号」が引数「範囲」の行数を超えるときはエラー #REF! になります。

引数「行番号」が文字列のときはエラー #VALUE! になります。

引数「列番号」は、引数「範囲」の一番左の列を基準とした 1 からの連番です。

引数「列番号」が引数「範囲」の列数を超えるときはエラー #REF! になります。

引数「列番号」が文字列のときはエラー #VALUE! になります。

引数「領域番号」が引数「範囲」の数を超えるときはエラー #REF! になります。