概要
「この表の“n番目の列”だけほしい」「列が増えたり並び替わっても、列番号で柔軟に取りたい」
そんなときに使えるのが INDEX 関数の「列番号」引数です。
INDEX は「行番号+列番号」で、
範囲の中から「交差する1マス」や「1列まるごと」を取り出せる関数です。
ここでは、特に「n番目の列を取得する」という視点で、
プログラミング初心者向けに噛み砕いて解説していきます。
INDEX の基本(行と列で場所を指定)
基本の書式
まずは一番よく使う形からです。
=INDEX(範囲, 行番号, [列番号])
範囲
どの表・範囲から取りたいか。
例:$A$2:$E$100(5列×99行の表)
行番号
範囲の中で「上から何行目か」。
例:1なら「範囲の1行目」(A2:E2)を指します。
列番号
範囲の中で「左から何列目か」。
例:3なら「範囲の3列目」(C列相当)です。
このとき、
=INDEX($A$2:$E$100, 1, 3)
なら、「範囲$A$2:$E$100 の “1行目かつ3列目” → C2 の値」を返します。
ここに「n番目の列」という考え方を乗せていきます。
n番目の“1セル”を取得する(行も列も指定)
単純な例
A2:E100 を「5列×99行の表」として、
「上から 5 行目・左から n 列目」を取りたいとします。
たとえば、F1 に「列番号 n」を入れておいて、
=INDEX($A$2:$E$100, 5, F1)
と書けば、F1 に 1〜5 のどの数字を入れても、
その列番号のセル(A〜E列のどれか)の「5行目」が返ってきます。
ここでは「n番目の列」を F1 の値で動かしているわけです。
n番目の“列まるごと”を取り出す
COLUMN と組み合わせて横方向にコピー
よくあるのが、「A2:E100 の中から、1列目、2列目、3列目…と順番に取りたい」というパターンです。
F列から右に向かって、A列〜E列を順番に並べ直したいとします。
F2 に次の式を書いて右にコピーします。
=INDEX($A$2:$E$100, 0, COLUMN(A1))
ポイントは「行番号に 0 を入れている」ところです。
INDEX は、行番号に 0 を指定すると
“列単位”で範囲を返すモードになります。
COLUMN(A1) は「1」
COLUMN(B1) は「2」
COLUMN(C1) は「3」
となるので、右にコピーするだけで
F列 → 範囲の1列目(A列)
G列 → 範囲の2列目(B列)
H列 → 範囲の3列目(C列)
……というように、「n番目の列」を順に取得できます。
任意の n をセルで指定して列を取得する
「好きな列番号」をセルで指定する
例えば、H1 に「取りたい列番号(n)」を入力しておき、
H2 から下に「その列だけ」をまるごと表示したいとします。
この場合の式はこうです。
=INDEX($A$2:$E$100, 0, $H$1)
行番号 0 → 列まるごと
列番号 $H$1 → H1 に書いた番号の列
たとえば H1 に 3 と入れれば、「範囲の3列目(C列)」が H2:H100 にスピル表示されます
(Microsoft 365 のスピル対応版の場合)。
n番目の列を“見出し名から”決める応用
「n番目の列」という発想は、
「見出し名から列番号を求める」と組み合わせるとさらに強力になります。
XMATCH を使って「見出し名が何番目の列か」を取得し、
その数値を INDEX の列番号に渡します。
見出し名から列番号を求めて INDEX
A1:E1 に見出し行があり、A2:E100 にデータがあるとします。
G1 に「取得したい見出し名」(例:売上)が入っている場合、
G2 には次のように書けます。
=INDEX($A$2:$E$100,
0,
XMATCH(G1, $A$1:$E$1, 0))
XMATCH(G1, $A$1:$E$1, 0) が
「G1 の見出しが、見出し行の中で何番目の列か」を返し、
その列番号を INDEX に渡して「その列まるごと」を返しているイメージです。
列の並び替えや挿入があっても、見出し名さえ変わらなければ、
常に正しい列を「n番目の列」として取得できます。
よくあるつまずきポイント
行番号 0 を知らないと「列全体が取れない」
INDEX で列まるごと取りたいときに、
行番号を省略してもうまくいかず、1セルしか返ってこないことがあります。
「列まるごと」を返したいときは、
行番号に 0 を指定する というルールを覚えておいてください。
=INDEX(範囲, 0, 列番号)
この形が「n番目の列まるごと」の基本形です。
列番号が範囲外だとエラーになる
範囲が A2:E100 なら列数は5です。
列番号に 6 以上を指定すると #REF! になります。
セルから n を渡すときは、
「1〜列数まで」の値だけを入れるように注意しましょう。
例題
問題1: A2:E100 に表があります。5行目の「3列目」の値を I2 に表示する INDEX の式を書いてください。
=INDEX($A$2:$E$100, 5, 3)
問題2: A2:E100 に表があります。H1 に列番号 n が入っているとき、「5行目の n列目」を I2 に表示する式を書いてください。
=INDEX($A$2:$E$100, 5, $H$1)
問題3: A2:E100 に表があります。F2 に次の式を書き、右にコピーしたときに、A列〜E列を順番に「列まるごと」取得できるようにしてください。
=INDEX($A$2:$E$100, 0, COLUMN(A1))
問題4: A2:E100 に表があり、H1 に列番号 n が入っています。H2 から下に「n番目の列だけ」を表示する式を H2 に書いてください。
=INDEX($A$2:$E$100, 0, $H$1)
問題5: A1:E1 に見出し、A2:E100 にデータがあります。G1 に「売上」という見出し名が入っているとき、「売上列だけ」を G2 から下に表示する式を書いてください(XMATCH と INDEX を組み合わせてください)。
=INDEX($A$2:$E$100,
0,
XMATCH(G1, $A$1:$E$1, 0))
まとめ
「n番目の列を取得する」INDEX の使い方は、次の2つを押さえれば十分です。
- 1セルを取りたいとき
=INDEX(範囲, 行番号, 列番号) - 列まるごと取りたいとき
=INDEX(範囲, 0, 列番号)
ここに COLUMN や XMATCH と組み合わせて「列番号を動かす」発想を足すと、
列の増減・並べ替えに強い、柔軟なシートが作れるようになります。
