LEVEL 5 データを整理・抽出する 上級
Lesson 054

INDEX関数について

練習用Excelファイル lesson054-practice.xlsx

練習用ファイルは、パソコンからダウンロードしてください。

INDEX関数について

前回の MATCH関数は「値の位置を返す」関数でした。

今回学ぶ INDEX関数(インデックス関数) は、その逆。「位置から値を取り出す」関数です。

  • 表の 3行目・2列目 の値は?
  • 範囲の 5番目 は誰?
  • 座席表の A列・10行目 に座っているのは?

「縦と横の座標で値を指定する」というイメージで、MATCH とちょうど対になる関数です。

実は、この INDEX関数も MATCH関数と同じく、単独ではあまり使いません。 2つを 組み合わせて使ったとき に、その真価が発揮されます。

今回は INDEX の基本動作をサラッと押さえたあと、INDEX × MATCH の組み合わせを紹介していきます。

関数ライブラリ
関数ライブラリ


INDEX関数の構文

=INDEX(範囲, 行番号, 列番号)

  • 範囲 :値を取り出したい表全体
  • 行番号 :範囲の上から何行目か
  • 列番号 :範囲の左から何列目か

範囲の中の、(行,列)の座標を指定して値を取り出す」という、ストレートな関数です。

この関数は実はもう一つの「参照」モードもあるのですが、ひとまずこのレッスンでは「配列・行番号・列番号」のモードでご紹介します。

引数ダイアログの前の選択肢
引数ダイアログの前の選択肢

引数ダイアログ
引数ダイアログ


具体例で見てみる

商品マスタを使います。

:::excel
A1=商品コード
B1=商品名
C1=単価
A2=P001
B2=コーヒー
C2=400
A3=P002
B3=紅茶
C3=350
A4=P003
B4=ケーキ
C4=500
A5=P004
B5=サンドイッチ
C5=600
A6=P005
B6=パスタ
C6=900
:::

この表で「3行目・2列目 の値は?」を取り出してみます。

=INDEX(A2:C6, 3, 2)

  • 範囲 :A2:C6(見出しを除いたデータ部分)
  • 行番号 :3(範囲の上から3行目)
  • 列番号 :2(範囲の左から2列目)

範囲 A2:C6 の3行目・2列目 = B4 セル = ケーキ

結果:ケーキ

範囲の 左上を(1, 1)として 数えるので、A2が(1,1)、B2が(1,2)、A3が(2,1)…という数え方になります。

これが INDEX の基本動作。動きはシンプルですが、「3行目・2列目」のように 数字で位置を指定 しているところに注目してください。「この数字、どこかから動的に取れたら便利だな」と思いませんか?

そう、ここで MATCH の出番です。


INDEX と MATCH を組み合わせる

前回学んだ MATCH は「位置(何番目か)を返す」関数でした。

つまり、

  • MATCH(前回):位置を返す
  • INDEX(今回):位置から値を取り出す

この2つを 組み合わせる と、こうなります。

ステップ1: MATCH で「どこにあるか」を求める
ステップ2: INDEX で「その位置の値を取り出す」

リレー走者のように、MATCH が見つけたバトン(位置)を、INDEX が受け取って値を引き出す ── これが INDEX × MATCH の基本発想です。


新幹線料金表で試してみる

前回 MATCH のレッスンで使った新幹線料金表、もう一度登場してもらいます。

:::excel
A1=駅
B1=のぞみ
C1=ひかり
D1=こだま
A2=新横浜
B2=1760
C2=1530
D2=1300
A3=名古屋
B3=11300
C3=10560
D3=9870
A4=京都
B4=14170
C4=13320
D4=12640
A5=新大阪
B5=14720
C5=13870
D5=13190
:::

名古屋までの、ひかりの料金は?」を INDEX × MATCH で取り出します。

=INDEX(B2:D5, MATCH("名古屋",A2:A5,0), MATCH("ひかり",B1:D1,0))

少し長いので、分解してみます。

ステップ1: MATCH("名古屋",A2:A5,0) → 「名古屋」は A2:A5 の 2番目 → 結果 2
ステップ2: MATCH("ひかり",B1:D1,0) → 「ひかり」は B1:D1 の 2番目 → 結果 2
ステップ3: INDEX(B2:D5, 2, 2) → 範囲 B2:D5 の2行目・2列目 = C3 = 10560

結果:10560

MATCH 2回で「どの行・どの列か」を計算し、INDEX で「その座標の値」を取り出す。3つの関数が、見事に連携しています。


VLOOKUP × MATCH との違い

前回、同じ料金表を VLOOKUP × MATCH でも書きました。並べてみましょう。

VLOOKUP × MATCH(前回)

=VLOOKUP("名古屋", A:D, MATCH("ひかり",B1:D1,0), FALSE)

INDEX × MATCH(今回)

=INDEX(B2:D5, MATCH("名古屋",A2:A5,0), MATCH("ひかり",B1:D1,0))

どちらも同じ結果(10560)になります。

INDEX × MATCH のほうが、「行も列も MATCH で動的に決められる」 のがポイントです。

VLOOKUP は「左端の列で検索」という制約がありましたが、INDEX × MATCH には そんな制約がありません

検索列の左にあるデータも取れる」「行も列も自由」という柔軟さが、INDEX × MATCH 最大の強みです。


XLOOKUP で書くと?

「あれ、XLOOKUP なら、もっとシンプルに書けるんじゃない?」と思った方、その通りです。

XLOOKUP で同じことを書くと、こうなります。

=XLOOKUP("名古屋", A2:A5, XLOOKUP("ひかり", B1:D1, B2:D5))

XLOOKUP を入れ子にすることで、同じ結果が得られます。

新規で書くなら、XLOOKUP のほうがシンプル です。これは間違いありません。

ただ、XLOOKUP が使えるようになったのは比較的最近(Microsoft 365 と Excel 2021 以降)なんですね。それまでの Excel ユーザーは、INDEX × MATCH を「最強のコンボ」 として愛され続けていました。

ですので、関数のロジック力を鍛えるための練習用関数として挑戦してみてください。


ここから先は、100Excel の範囲を超えます

INDEX という関数は、MATCH と同じく 単独ではあまり使いません

ここで触れた INDEX × MATCH 以外にも、INDEX には実は 「参照」モードという、もう一つの顔 があったり、SUMPRODUCT や OFFSET と組み合わせて、動的な範囲を作る 高度なテクニックがあったりします。

ただ、これらは 100Excel が目指す「Excelの基礎を網羅する」スコープを超える ところです。実務で本当に必要になったとき、また別途学んでいただければと思います。

このレッスンでは、INDEX × MATCH の発想を知っていただくこと をゴールとします。

  • INDEX は「位置から値を取り出す」関数
  • MATCH と組み合わせると、VLOOKUP / HLOOKUP の上位互換のような動きができる
  • 今は XLOOKUP のほうが書きやすいが、過去のファイルでよく見るパターン なので、読めるようになっておくと役立つ

これで十分です。


まとめ

  • INDEX関数は、範囲の(行,列)座標から値を取り出す
  • 構文:=INDEX(範囲, 行番号, 列番号)
  • 単独でも使えるが、MATCH と組み合わせる のが本領
  • INDEX × MATCH は、XLOOKUP 登場前の最強コンボだった
  • 新規で書くなら XLOOKUP、古いファイルを読むなら INDEX-MATCH の発想を
  • INDEX の高度な使い方は 100Excel のスコープを超えるので、ここまで

検索系の関数(XLOOKUP / VLOOKUP / HLOOKUP / MATCH / INDEX)が、これで一通りそろいました。実務での主役は XLOOKUP ですが、他の関数も「こういう場面で出てくる、こういう動きをする」と頭に入れておくと、応用力がついていきます。

それでは LEVEL 5 の最後に、名前の定義 を学習しておきましょう。


ショートカット

※このレッスンに対応するショートカットはありません。

次のLessonへ Lesson 055 名前の定義について