概要
INDEX 関数は、「表(範囲)の中から、n 行目・m 列目の値を取り出す」関数です。
イメージとしては、
「この表の“上から○行目・左から○列目”のセルの中身をください」と指定する感じです。
VLOOKUP のように「検索」して探すのではなく、
「位置(行番号・列番号)」でストレートに抜き出すのが INDEX の役割です。
基本の書式と考え方
単純な 1 列(縦方向)の INDEX
最もシンプルな形は、「1 列の中から n 番目の値を取得する」パターンです。
=INDEX(範囲, 行番号)
例えば、A1:A5 に次のようなデータがあるとします。
A1:りんご
A2:みかん
A3:ぶどう
A4:もも
A5:なし
このとき、
=INDEX(A1:A5,1) ' → 「りんご」(1番目)
=INDEX(A1:A5,3) ' → 「ぶどう」(3番目)
=INDEX(A1:A5,5) ' → 「なし」(5番目)
というように、「範囲の中で上から何番目か」で値を取ってきます。
表(2 次元)から行×列で指定する INDEX
行と列がある表から取り出すときは、列番号も指定します。
=INDEX(範囲, 行番号, 列番号)
例えば、A1:C3 に次のような表があるとします。
A列:商品名
B列:単価
C列:在庫数
A2:りんご / B2:100 / C2:30
A3:みかん / B3:80 / C3:50
A4:ぶどう / B4:200 / C4:10
このとき、
=INDEX(A2:C4,1,1) ' → 「りんご」(1行1列)
=INDEX(A2:C4,2,2) ' → 80(2行2列)
=INDEX(A2:C4,3,3) ' → 10(3行3列)
というように、「範囲の左上を“1 行目・1 列目”とみなして数える」のがポイントです。
行番号・列番号を別セルから指定する
行番号を別セルで可変にする
行番号を固定値ではなくセル参照にすれば、「何行目を取るか」を柔軟に変えられます。
=INDEX(A1:A5, B1)
B1 に「1〜5」のどれが入っているかによって、返ってくる値が変わります。
例えば B1 に 3 が入っていれば、「A1:A5 の 3 番目」= A3 の値が返ります。
2 次元表で行番号・列番号をセル参照にする
=INDEX(A2:C4, 行番号が入ったセル, 列番号が入ったセル)
例えば、行番号が E1、列番号が F1 に入っているなら、
=INDEX(A2:C4, E1, F1)
とすることで、「E1 行目・F1 列目」の場所から値を取ってくるセルを作れます。
後から「2 行目・3 列目の値が欲しい」などと変えたいときに、数式を書き換える必要がなくなります。
INDEX が真価を発揮する組み合わせパターン
MATCH と組み合わせて「検索結果の位置」を使う
INDEX 単体では「n 番目」を自分で指定しますが、
MATCH 関数と組み合わせると、「検索の結果見つかった行番号」をそのまま INDEX に渡せます。
典型的な形は次のようになります。
=INDEX(取り出したい列の範囲, MATCH(検索値, 検索する列の範囲, 0))
MATCH で「検索値が何行目にあるか」を求め、その行番号を INDEX が使って値を取り出す、という流れです。
VLOOKUP より柔軟な「縦方向の検索」としてよく使われる王道パターンです。
(MATCH との組み合わせについては、別の回でじっくりやると理解が定着しやすいです。)
よくあるつまずきポイント
行番号・列番号は「範囲の中での番号」
INDEX の行番号・列番号は、「シート全体の行列番号」ではなく、
指定した範囲の左上を「1」としたときの番号です。
例えば、範囲が A2:C4 の場合、
A2:1 行 1 列
B2:1 行 2 列
C2:1 行 3 列
A3:2 行 1 列
…という数え方になります。
だから、
=INDEX(A2:C4,2,3)
は、「A2:C4 の 2 行 3 列目」= C3 を意味します。
範囲外の行番号・列番号はエラー
範囲 A1:A5 に対して INDEX(A1:A5,6) のように「6 行目」を指定すると、
存在しない行を指すことになるので #REF! エラーになります。
同様に、2 次元表で列番号が範囲の列数を超えると #REF! になります。
コード例・テンプレート
1 列から「n 番目の値」を取る基本形
=INDEX(A1:A10, n)
n 番目のセル(A1 を 1 番目と数える)の値が返ります。
行番号をセルで指定する形
=INDEX(A1:A10, B1)
B1 に入っている数値(1〜10)に応じて、「その番目」の値が返ります。
表から行×列で指定する形
=INDEX(A2:D10, 行番号, 列番号)
「A2:D10 の中で、上から○行目・左から○列目」の値を返します。
MATCH と組み合わせる典型パターン(縦方向)
=INDEX(戻り値の列の範囲, MATCH(検索値, 検索する列の範囲, 0))
たとえば、A 列に「商品名」、B 列に「単価」が入っていて、
D1 に入力した商品名の単価を取得したい場合は、
=INDEX(B2:B100, MATCH(D1, A2:A100, 0))
のように書きます。
例題
問題1
A1:A5 に次のようなデータがあります。
A1:りんご
A2:みかん
A3:ぶどう
A4:もも
A5:なし
この範囲から「3 番目の値(ぶどう)」を INDEX 関数で取得する式を書いてください。
(ヒント:範囲は A1:A5、行番号は 3 です)
問題2
A2:C4 に次のような表があります(A1:C1 は見出し)。
A2:りんご / B2:100 / C2:30
A3:みかん / B3:80 / C3:50
A4:ぶどう / B4:200 / C4:10
この表から「2 行 3 列目(C3:50)」の値を INDEX で取得する式を書いてください。
(ヒント:範囲は A2:C4、行番号 2、列番号 3 です)
問題3
A1:A10 にデータが入っていて、
「何番目を取るか」がセル B1 に入っているとします。
B1 の値に応じて、A1:A10 の中からその番目の値を取得したいとき、
INDEX の式をどう書けばよいか答えてください。
問題4
範囲 A2:C4 に対して、次の式はどのセルの値を返すか説明してください。
=INDEX(A2:C4,3,2)
具体的に、「どの行・どの列」で、そこにどんな値が入っている想定か(例を作って)説明してみてください。
問題5
範囲 A1:A5 に対して、次の式を実行するとどうなるか、結果と理由を答えてください。
=INDEX(A1:A5,6)
(ヒント:範囲の行数と、指定した行番号の関係を考えます)
