INDEX関数の使い方|行と列の位置から値を取り出す

執筆者:

カテゴリ:

INDEXは、範囲の中から「何行目・何列目」を指定して値を取り出す関数です。

単体では地味ですが、MATCH と組み合わせることで、VLOOKUP の弱点をすべて回避した検索が組めます。この INDEX+MATCH は長年スプレッドシートの定番テクニックとして使われてきました。

書式

=INDEX(範囲, [行番号], [列番号])
引数 内容
範囲 取り出す対象の範囲
行番号 範囲の上から何番目か
列番号 範囲の左から何番目か。範囲が1列なら省略可

行番号・列番号はシート全体ではなく、指定した範囲の中での位置です。ここを間違えやすいので注意してください。

基本の使い方

A B C
1 商品コード 商品名 価格
2 A-101 ボールペン 150
3 A-102 ノート 320
4 B-201 ハサミ 480
=INDEX(A1:C4, 3, 2)   → ノート

範囲 A1:C4 の中で、上から3番目・左から2番目 = B3セルの「ノート」が返ります。

範囲を1列だけにすれば、列番号は省略できます。

=INDEX(B1:B4, 3)   → ノート

行番号を0にすると列全体が返る

行番号に 0 を指定すると、その列の全体が配列として返ります。

=INDEX(A1:C4, 0, 2)   → 商品名 / ボールペン / ノート / ハサミ

列番号を 0 にすれば行全体です。この挙動は他の関数に範囲を渡すときに使います。

INDEX + MATCH ── 定番の検索パターン

INDEXの本領はここです。行番号を MATCH で求めると、検索関数になります。

「B-201」の商品名を取り出す例:

=INDEX(B2:B4, MATCH("B-201", A2:A4, 0))

分解するとこうなります。

  1. 1. MATCH("B-201", A2:A4, 0) → A列の上から3番目にある、なので 3
  2. 2. INDEX(B2:B4, 3) → B列の3番目 = ハサミ

MATCHで位置を求め、INDEXでその位置の値を取る。 これだけです。

VLOOKUPより優れている点

左方向にも検索できます。 VLOOKUPは範囲の左端列しか検索できませんが、INDEX+MATCHは検索する列と取り出す列が独立しているため、位置関係を問いません。

=INDEX(A2:A4, MATCH("ハサミ", B2:B4, 0))   → B-201

列を挿入しても壊れません。 列番号を数字で書いていないためです。

処理が軽いという利点もあります。VLOOKUPは指定した範囲全体を読みますが、INDEX+MATCHは検索列と結果列の2列しか見ません。行数が数万規模になると体感で差が出ます。

XLOOKUPがあるなら

XLOOKUP は INDEX+MATCH と同じことを、1つの関数で書けます。

=XLOOKUP("B-201", A2:A4, B2:B4)

読みやすさでは明らかにXLOOKUPが上です。新しく書くならXLOOKUPで構いません。

INDEX+MATCHを覚えておく価値があるのは、次の場合です。

  • – 古いExcelとファイルを共有する(XLOOKUPが動かない)
  • – 既存ファイルの数式を読む・直す必要がある
  • – 行と列の両方をMATCHで求める二次元検索をしたい

二次元の検索

行も列も動的に決めたい場合、MATCHを2つ使います。

=INDEX($B$2:$D$10, MATCH($F$1, $A$2:$A$10, 0), MATCH($F$2, $B$1:$D$1, 0))

F1に行の項目、F2に列の項目を入れると、その交差点の値が返ります。クロス集計表からのピンポイント抽出はこの形が定番です。

エラーの対処

#REF! が出る

指定した行番号・列番号が範囲の外を指しています。範囲が3行なのに行番号4を指定した、というケースです。MATCHの結果と範囲の開始行がずれていることも多いので、MATCH 単体の結果を別セルで確かめると原因が早く分かります。

#N/A が出る

INDEXではなく、中の MATCH が失敗しています。検索キーが見つかっていません。

結果が1つずれる

範囲の開始行のずれが原因です。MATCHA1:A4(見出し行を含む)で取り、INDEXB2:B4(見出しなし)で指定すると1行ずれます。両方を同じ行から始めるのが鉄則です。

まとめ

  • – 書式は =INDEX(範囲, 行番号, 列番号)
  • – 位置はシートではなく指定範囲の中での番号
  • INDEX(結果列, MATCH(キー, 検索列, 0)) が検索の定番形
  • – 左方向の検索・列挿入への耐性・処理の軽さが利点
  • – 新規に書くなら XLOOKUP のほうが読みやすい

関連する関数

  • MATCH — 位置を求める。INDEXとセットで使う
  • VLOOKUP — 従来の検索関数
  • XLOOKUP — INDEX+MATCHを1関数で書ける後継
  • OFFSET — 基準セルからずらして参照する
  • 関数一覧に戻る

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です