Excel関数 逆引き集 | n番目の値を取得 → INDEX

Excel
スポンサーリンク

概要

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)

(ヒント:範囲の行数と、指定した行番号の関係を考えます)

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました