Excel関数 逆引き集 | 行列指定で値取得 → INDEX

Excel VBA Excel
スポンサーリンク

概要

INDEX関数は「指定した“行番号 × 列番号”の交点の値を取り出す」ための関数です。
イメージとしては「表の中から、“何行目・何列目”のマスをピンポイントで抜き出す」感じです。

VLOOKUPのように「左端からしか取れない」といった制約がなく、
MATCH関数と組み合わせることで「見出し名で行・列を探して値を取る」という、柔軟で壊れにくい参照が作れます。


基本の使い方(行番号+列番号で指定)

書式

=INDEX(範囲, 行番号, [列番号])
  • 範囲:値を取り出したい表(1行×複数列、複数行×1列でもOK)
  • 行番号:範囲の“上から何行目”か(1が先頭)
  • 列番号:範囲の“左から何列目”か(1が先頭)。省略可(縦一列の範囲なら省略することが多い)

単純な例

A2:C5 の表があるとして、「2行目3列目の値」を取りたいとき:

=INDEX(A2:C5, 2, 3)
  • A2:C5 の中で
    • 上から2行目 → 実際の行としては「3行目」(A3:C3)
    • 左から3列目 → C列
      つまり「C3 の値」を返します。

行または列だけのINDEX

縦一列から行番号だけで取る

A2:A10 から「上から5番目」の値を取りたいとき:

=INDEX(A2:A10, 5)

これは実際には「A6」の値です(A2から数えて5番目 → A6)。

列番号は不要なので省略しています。

横一行から列番号だけで取る

A1:F1 から「左から4番目」の値を取りたいとき:

=INDEX(A1:F1, 4)

範囲が1行だけなら「行番号」ではなく「列番号」で解釈されます(A1:F1 の4番目 → D1)。


MATCHと組み合わせて“見出しベース”で値を取る

本領発揮はここです。
「何行目・何列目か」を、固定の数字ではなく MATCHで自動で探させる と、列の挿入・順番変更に強い式になります。

行は固定、列を見出し名で動的に指定

1行目にヘッダー、2行目以降にデータが並んでいる表を考えます。

  • A1:Z1 … 見出し(項目名)
  • A2:Z2 … 1件目のデータ

「”売上”という見出しの列の、2行目の値」を取りたいとき:

=INDEX(A2:Z2, MATCH("売上", A1:Z1, 0))
  • MATCH(“売上”, A1:Z1, 0) で、「売上」がヘッダー行の何列目かを取得
  • その列番号を INDEX の第2引数に渡しているイメージです

行も列も両方を見出しから指定(2次元INDEX)

  • A1:Z1 … 横方向の見出し(項目名)
  • A2:A100 … 縦方向の見出し(顧客名など)
  • A2:Z100 … データ本体

「顧客名がH2、項目名がH3 に入っているとして、その交点の値」を取りたい式はこう書けます。

=INDEX(A2:Z100,
       MATCH(H2, A2:A100, 0),
       MATCH(H3, A1:Z1, 0))
  • MATCH(H2, A2:A100, 0) で「顧客が何行目か」
  • MATCH(H3, A1:Z1, 0) で「項目が何列目か」
  • INDEX がその交点を返す

これが「行列指定で値取得」の典型パターンです。


よくあるつまずきと対策

1. INDEXの行・列番号は「範囲内での位置」

A2:C5 を範囲にしたときの 行番号=1 はシート全体の1行目ではなく、A2:C5 の中の一番上(=2行目) です。

  • =INDEX(A2:C5, 1, 1) → A2
  • =INDEX(A2:C5, 2, 1) → A3

というイメージで、「範囲の中で何番目か」を指定していることを忘れないようにしてください。

2. 行番号や列番号に0は使えない(基本形)

通常の使い方では、行番号・列番号は1以上の整数です。
(範囲の全部を返す配列形INDEXはありますが、まずは「1〜」だと覚えてOK)

3. MATCHの結果と組み合わせるときは“範囲を揃える”

たとえば、

  • MATCHの範囲:A1:Z1
  • INDEXの範囲:B2:Z100

のように“片側だけ1列ずれている”と、列番号と実際の列が合わなくなります。
MATCHで使う範囲と、INDEXの範囲の「行・列の開始位置」を揃える癖をつけると安全です。

4. VLOOKUPより壊れにくい

VLOOKUP は「列番号」を固定の数字で持つので、列の挿入で簡単にズレます。
INDEX+MATCHなら、

  • MATCHが見出しを探して列番号を返す
  • INDEXは「何番目の列か」だけを見ている

ので、列を挿入・削除しても“見出しさえ残っていれば”正しく追従してくれます。


例題

問題1: A2:C5 の表から、2行目3列目の値を D2 に表示してください。

=INDEX(A2:C5, 2, 3)

問題2: A2:A10 から「上から5番目」の値を B2 に表示してください。

=INDEX(A2:A10, 5)

問題3: A1:Z1 に見出し、A2:Z2 にデータがあるとき、「売上」という見出しの2行目の値を B5 に表示してください(MATCHと組み合わせて)。

=INDEX(A2:Z2, MATCH("売上", A1:Z1, 0))

問題4: A1:Z1 に見出し、A2:A100 に顧客名、A2:Z100 にデータがあります。H2 に顧客名、H3 に項目名が入っているとき、交点の値を H4 に表示してください。

=INDEX(A2:Z100,
       MATCH(H2, A2:A100, 0),
       MATCH(H3, A1:Z1, 0))

問題5: A1:E1 に「日付, 担当者, 商品, 数量, 売上」、A2:E100 にデータがあります。G1 に項目名、G2 に行番号(2〜100)が入っているとき、「G1で指定した項目の、G2行目の値」を G3 に表示してください。

=INDEX(A2:E100, G2-1, MATCH(G1, A1:E1, 0))

※範囲がA2から始まるので「行番号」は「G2-1」です(A2が1行目扱い)。


まとめ

INDEXは「表の中から、行番号×列番号で値を抜き出す」関数です。
単体では「位置指定」、MATCHと組み合わせると「見出し名ベースで柔軟に値を取得」できるようになります。

  • =INDEX(範囲, 行番号, 列番号) の形をまず覚える
  • 行番号・列番号は“範囲内での位置”
  • MATCHで行・列番号を動的に求めると、列の挿入・並び替えに強い式になる

この3点を押さえれば、「壊れにくい検索・参照」が作れるようになります。

タイトルとURLをコピーしました