INDEX関数で複数の表を切り替える|領域番号の使い方

INDEX関数で複数の表を切り替える|領域番号の使い方

INDEXとMATCHを組み合わせた行列検索は非常に強力ですが、「もし検索対象のテーブルが複数あったら?」——例えば、「日中料金」と「夜間料金」のように、構造は同じでも内容が異なる複数の表から、条件に応じてデータを引きたい場合、どうすればよいでしょうか。

IF関数で切り替える方法もありますが、もっとスマートで拡張性の高い解決策があります。それは、INDEX関数の隠れた引数「領域番号」を使う方法です。今回は、この神業とも言えるテクニックをマスターし、Excelスキルを別次元へと引き上げましょう。

目次

今回のゴール:指定した表No.から、券種と年齢区分に一致する料金を検索する

「表1(日中)」と「表2(夜間)」という2つの料金表があります。M2セルで表No.を切り替えることで、指定した表から、M3セルの券種とM4セルの年齢区分に一致する料金をM5セルに表示させることが目標です。

解決策:INDEX関数の「領域番号」を活用する

手順:M5 に INDEX の式を入れて Enter

日中(表1)と夜間(表2)の 2 つの料金表から、M2 の表No・M3 の券種・M4 の年齢区分に合う料金を取り出します。 M5 に次の式を入力して、Enter キーを押します❶。

M5 に入れる式
=INDEX((B3:D5,G3:I5),MATCH(M3,A3:A5,0),MATCH(M4,B2:D2,0),M2)
(B3:D5,G3:I5) 参照(2つの表)MATCH(M3,A3:A5,0) 行番号(券種)MATCH(M4,B2:D2,0) 列番号(年齢区分)M2 領域番号
ひとことでM2 の番号(2)で夜間の表を選び、「2日」の行と「大人」の列が交わる料金を取り出す
式を分けて読むと(色は画像の枠と同じ)
参照(B3:D5,G3:I5)
どの表から?
→ 日中と夜間の 2 つの表(かっこでまとめる)
行番号MATCH(M3,A3:A5,0)
何行目?
→ 券種「2日」=2 行目
列番号MATCH(M4,B2:D2,0)
何列目?
→ 年齢区分「大人」=1 列目
領域番号M2
どちらの表?
→ 2=夜間の表
自分の表で使うときは
切り替えたい表を (表1,表2,…) のようにかっこでまとめ、最後に「何番目の表か」を入れます。表は同じ形(行と列の数)にそろえておきます。例:3 つの表から、P2 の番号の表の 2 行目・1 列目=INDEX((B3:D5,G3:I5,L3:N5),2,1,P2)
  • 領域番号が表の数(ここでは 2)より大きいと #REF! になります。
エクセルのINDEX関数で領域番号を使い2つの料金表を切り替える式と、参照・行番号・列番号・領域番号を色分けした画面
エクセルのINDEX関数で領域番号を使い2つの料金表を切り替える式と、参照・行番号・列番号・領域番号を色分けした画面

確認:13,900 は夜間の表の「2日」「大人」の料金

エクセルのINDEX関数で、領域番号2の夜間の表から2日の行と大人の列が交わる13,900を取り出したことを色で示した画面
エクセルのINDEX関数で、領域番号2の夜間の表から2日の行と大人の列が交わる13,900を取り出したことを色で示した画面

答えは 13,900 になりました❷。式は、次の順に計算しています。

  1. M2 の 2で、2 番目の表を選ぶ
    ⇒ 夜間の表(G3:I5)
  2. MATCHで「2日」が何行目か、MATCHで「大人」が何列目かを調べる
    ⇒ 2 行目・1 列目
  3. 夜間の表の 2 行目・1 列目を取り出す
    ⇒ 13,900
ヒント:M2 を 1 にすると日中の表
同じ式のまま、日中の表(B3:D5)から探します。「2日」「大人」なら 13,600 です。

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

サンプルデータ

以下は、上記画像のExcelデータですので、ダウンロードして練習として使用ください。

練習用Excelファイル(無料ダウンロード)
この記事の解説で使うExcelデータです。数式と練習データが入っているので、本文の式を同じ表で試せます。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

このテクニックを試すために、以下のサンプルデータをExcelシートにコピーしてください。

料金表

ABCDEFGHI
1表1リフト代金(日中)表2リフト代金(夜間)
2大人中人小人大人中人小人
31日8,5007,0004,7001日8,8007,2004,800
42日13,60010,9007,5002日13,90011,1007,600
53日17,80014,3009,8003日18,10014,5009,900

検索エリア

LM
1リフト代金検索
2表No2
3券種2日
4年齢区分大人
5料金(ここに数式を入力)
6
7表No
81
92

数式の解説(4つの引数を分解)

この数式の最大のポイントは、INDEX関数の最初の引数と4番目の引数です。

INDEX(参照,行番号,列番号,領域番号)

1. 参照:(B3:D5,G3:I5)

  • 超重要ポイント: 検索対象となる複数の範囲(表1のデータ範囲B3:D5 と 表2のデータ範囲G3:I5)をカンマ(,)で区切り、全体をもう一つのカッコ()で囲みます。
  • このように記述することで、INDEX関数はこれらの範囲を別々の「領域」として認識します。B3:D5が領域1、G3:I5が領域2となります。

2. 行番号:MATCH(M3,A3:A5,0)

  • これは通常の行列検索と同じです。「M3セル(2日)」が、行の見出しA3:A5の2番目にあることを見つけ、「2」を返します。

3. 列番号:MATCH(M4,B2:D2,0)

  • 同様に、「M4セル(大人)」が、列の見出しB2:D2の1番目にあることを見つけ、「1」を返します。

4. 領域番号:M2

  • 超重要ポイント: 参照に複数の領域を指定した場合にのみ有効になる、4番目の引数です。
  • ここでM2セル(値は「2」)を指定することで、「領域2(つまり表2のG3:I5)を検索対象にしなさい」とINDEX関数に命令しています。もしM2セルが「1」なら、領域1(表1)が検索対象になります。

まとめ

この数式は、以下のステップで動作します。

  1. MATCH関数が行番号「2」と列番号「1」を特定する。
  2. INDEX関数が4番目の引数M2(=2)を見て、検索対象を2番目の領域(夜間料金表)に決定する。
  3. 最終的に、夜間料金表の「2行目、1列目」にある「13,900」を返す。

複数のテーブルを扱う際、IF関数を何重にもネストさせると数式が複雑化し、管理が大変になります。しかし、INDEX関数の領域番号を使えば、数式は非常にスマートなまま、参照する表を3つ、4つと簡単に追加できます。

これはまさにExcel関数の真髄とも言えるテクニックです。ぜひこの方法をマスターして、誰からも一目置かれるExcelの達人を目指してください。

複数のクロス表からINDEX関数で抽出する実践例はこちらです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次