スプレッドシートで「表の中の特定の位置にある値」をピンポイントで取り出したいとき便利なのがINDEX関数です。使い方と内部のしくみを、草野球の成績管理表で特定の試合の成績を取得する場面を例に、初心者向けに丁寧に説明します。
INDEX関数とは
指定した範囲の中から、「上から何番目・左から何番目」という位置を数字で指定して、その位置にある値を返す関数です。名前や条件で探すのではなく、行番号・列番号という「座標」で値を取り出す点が特徴です。
基本の書式はこうです。
=INDEX(範囲, 行番号, [列番号])
範囲が1列(または1行)だけの場合は、列番号(または行番号)を省略できます。範囲が複数列にまたがる表の場合は、行番号と列番号の両方を指定して、表内の1点を特定します。
成績管理表での実例:表内の特定位置の成績を取得する
大阪グーニーズの個人成績シートに、各試合の記録が1行ずつ入っているとします。A列に試合日、B列に対戦相手、C列に打数、D列に安打が入っている表です。
| 試合日 | 対戦相手 | 打数 | 安打 |
|---|---|---|---|
| 4/6 | ○○ファイターズ | 4 | 2 |
| 4/13 | △△ベアーズ | 3 | 1 |
| 4/20 | □□イーグルス | 4 | 3 |
| … | … | … | … |
データは2行目から始まっているとします。ここから「シーズン3試合目の安打数だけ」をピンポイントで取り出したいとき、式はこうなります。
=INDEX(D2:D30, 3)
D2:D30という範囲の中の「3番目」の値、つまりD4セルの値である「3」が返ってきます。範囲を複数列にまたいで指定すれば、行番号と列番号の両方で位置を特定することもできます。
=INDEX(A2:D30, 3, 4)
この場合、A2:D30という表の中で「上から3行目・左から4列目」にあたるD4セルの値が返ってきます。行番号・列番号はどちらも「範囲の先頭からの相対位置」であり、シート全体の行番号(4行目、など)とは別物である点に注意してください。
入力してみる
取り出した値を表示したいセルをクリックして選択します。
対象の範囲(例:D2:D30)をマウスでドラッグすると、自動で範囲が入力されます。
「,」に続けて、範囲内の何番目の値がほしいかを数字で入力します。複数列の範囲であれば、続けて列番号も入力します。
式を確定すると、指定した位置の値がすぐにセルに表示されます。
しくみを理解する:INDEXは何をしているのか
INDEX関数は、指定された範囲を「座標付きの表」として扱い、渡された行番号・列番号の座標に該当するセルの値をそのまま返しているだけです。値の中身が何であるか(文字列か数値か)を判断したり、条件に合うかどうかを調べたりする処理は一切していません。
- 行番号・列番号はシート上の行番号ではない(あくまで指定した範囲の先頭を1とした相対位置)
- 範囲外の番号を指定するとエラーになる(範囲がD2:D30(29行分)なのに行番号に35を指定するなど)
- 範囲が1列(または1行)のときは列番号(または行番号)を省略できる(内部的には1が指定されたのと同じ扱いになる)
よくあるミス:番号がズレる原因
「D4セルの値がほしいから行番号に4を入れる」というのは誤りです。範囲がD2:D30であれば、D4セルは範囲の先頭(D2)から数えて3番目にあたるため、行番号には3を指定する必要があります。シート上の行番号と、INDEXに渡す行番号は別物だと覚えておいてください。
「何試合目の成績か」を都度手入力で書き換えるのは手間ですし、入力ミスの元にもなります。実際の運用では、行番号の部分に別のセル(選手名から行番号を割り出す式など)を指定して、自動で位置が求まるようにすることがほとんどです。この組み合わせ方は、後日あらためて解説します。
- INDEX関数は「範囲内の行番号・列番号を指定して、その位置の値を返す」関数
- 行番号・列番号は範囲の先頭からの相対位置であり、シート上の行番号とは別物
- 範囲が1列(1行)なら列番号(行番号)は省略可能、複数列の表では両方指定して1点を特定する
次回予告
次回のテーマは「MATCH関数」です。検索値が範囲内の何番目にあるかを返す関数を、選手名から行番号を特定する例で解説していきます。
▶︎ 次回:MATCH関数の使い方としくみ



コメント