
ExcelのINDEX関数の使い方や、どういうときに使うのかを、分かりやすく具体例でご紹介します。定番のMATCH関数との組み合わせ方法や、INDEX関数の応用方法についても解説しているので、ぜひ参考にしてみてください。
INDEX関数とは?

INDEX関数は、指定した範囲から、行と列がクロスするセルの値を返します。
たとえば、A2:B4の範囲から、3行目と2列目が交差するセルの値を抽出したい場合、数式は次のようになります。
例:=INDEX(A2:B4,3,2)
ポイント
A2:B4の範囲で数えるため、左上のA2セルが1行目、1列目となります。この数式は、A2を基点に3行目と2列目が交差するB4セルの値を返します。
INDEX関数の引数:(参照, 行番号, [列番号])
INDEX関数の基本(MATCH関数との組み合わせ)
検索値と一致する値を抽出する

最も基本的となるのが、MATCH関数と組み合わせて、行と列のクロスする値を抽出する方法です。
たとえば、A列の商品名から「ばななの価格」を抽出したい場合、数式は次のようになります。
例:=INDEX(A2:B4,MATCH(D2,A2:A4,0),2)
数式の解説
- MATCH関数:
A2:A4の範囲で、ばななが何番目にあるかを検索します。 - INDEX関数:MATCH関数の結果(2番目)を行番号として、2列目(
B2:B4)の2行目の値(100)を返します。
MATCH関数の引数:(検索キー, 範囲, [検索の種類])
INDEX関数を使うメリット
VLOOKUP関数でも検索値と一致する値を抽出できますが、INDEX関数とMATCH関数を組み合わせて使うことで、次のようなメリットがあります。
- 柔軟性が高い:VLOOKUP関数は、検索キーが範囲の1列目に限定されますが、INDEX関数はMATCH関数を組み合わせることで、どの列でも検索キーに指定できます。
- 処理速度が速い:INDEX関数は、MATCH関数が返した「位置」の情報を使って、指定されたセルに直接アクセスします。そのため、データ量が膨大になった場合でも、処理が速くなります。
- 列の挿入や削除に強い:MATCH関数が自動で列の位置を計算するため、途中に列を挿入したり削除したりしても数式が壊れません。
INDEX関数の応用
一意の値を抽出する

INDEX関数を応用すると、UNIQUE関数がなくてもデータから一意の値を取り出せます。
- 作業列で「初めて出現した値」の行番号を取得
- COUNTIF関数とIF関数を使って、値が初めて出現した行にだけ、行番号を振ります。
- 例:
=IF(COUNTIF( $B$2:B2, B2 )=1,ROW(),"")
- INDEX関数で一意の値を抽出
- 次に、INDEX関数はSMALL関数が返す行番号を使って、重複しない値だけを抽出します。
- 例:
=IFERROR(INDEX(B:B,SMALL($A$2:$A$5,ROW(A1))),"")
この数式を下のセルにオートフィルでコピーすると、重複を排除した一意の値が抽出されます。
さらに詳しい解説は、「UNIQUE関数が使えない場合の代用方法」をご参照ください。
最終行の値を抽出する

INDEX関数を応用すると、特定の列からデータの入力されている最終行の値を取り出せます。
例:=INDEX(A:A,MAX((A:A<>"")*ROW(A:A)))
※Excelのバージョンによっては、[Ctrl]+[Shift]+[Enter]で確定する必要があります。
数式の解説
- A列のセルが空白かどうかを判定します。その結果(
TRUEまたはFALSE)に行番号を掛け算することで、データが入力されているセルの行番号だけを取得します。 - MAX関数で、取得した行番号の最大値(最終行の番号)を取り出します。
- INDEX関数で、MAX関数が返す行番号を使って、指定した範囲から値を抽出します。
空白行を詰める

INDEX関数を応用すると、特定データから空白行を除いた値を取り出せます。
- 作業列で値がある行の番号を取得
- IF関数を使って、値が入力されているセルにのみ行番号を振ります。
- 例:
=IF(B2="","",ROW())
- INDEX関数で空白行を詰める
- 次に、SMALL関数が返す行番号を使って、空白行を除いた値を抽出します。
- 例:
=INDEX(B:B,SMALL($A$2:$A$5,ROW(A1)))
この数式を下のセルにオートフィルでコピーすると、空白を除いた値が抽出できます。
さらに詳しい解説は、「空白を削除する方法 」をご参照ください。