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 キーを押します❶。
=INDEX((B3:D5,G3:I5) ,MATCH(M3,A3:A5,0) ,MATCH(M4,B2:D2,0) ,M2) (B3:D5,G3:I5)MATCH(M3,A3:A5,0)MATCH(M4,B2:D2,0)M2切り替えたい表を (表1,表2,…) のようにかっこでまとめ、最後に「何番目の表か」を入れます。表は同じ形(行と列の数)にそろえておきます。例:3 つの表から、P2 の番号の表の 2 行目・1 列目
=INDEX((B3:D5,G3:I5,L3:N5) ,2,1,P2) - 領域番号が表の数(ここでは 2)より大きいと #REF! になります。

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

答えは 13,900 になりました❷。式は、次の順に計算しています。
- M2 の 2で、2 番目の表を選ぶ
⇒ 夜間の表(G3:I5) - MATCHで「2日」が何行目か、MATCHで「大人」が何列目かを調べる
⇒ 2 行目・1 列目 - 夜間の表の 2 行目・1 列目を取り出す
⇒ 13,900
まず動かしてみよう|この記事のサンプルをその場で試せます
練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。
サンプルデータ

以下は、上記画像のExcelデータですので、ダウンロードして練習として使用ください。
このテクニックを試すために、以下のサンプルデータをExcelシートにコピーしてください。
料金表
| A | B | C | D | E | F | G | H | I | |
| 1 | 表1 | リフト代金(日中) | 表2 | リフト代金(夜間) | |||||
| 2 | 大人 | 中人 | 小人 | 大人 | 中人 | 小人 | |||
| 3 | 1日 | 8,500 | 7,000 | 4,700 | 1日 | 8,800 | 7,200 | 4,800 | |
| 4 | 2日 | 13,600 | 10,900 | 7,500 | 2日 | 13,900 | 11,100 | 7,600 | |
| 5 | 3日 | 17,800 | 14,300 | 9,800 | 3日 | 18,100 | 14,500 | 9,900 |
検索エリア
| L | M | |
| 1 | リフト代金検索 | |
| 2 | 表No | 2 |
| 3 | 券種 | 2日 |
| 4 | 年齢区分 | 大人 |
| 5 | 料金 | (ここに数式を入力) |
| 6 | ||
| 7 | 表No | |
| 8 | 1 | |
| 9 | 2 |
数式の解説(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)が検索対象になります。
まとめ
この数式は、以下のステップで動作します。
MATCH関数が行番号「2」と列番号「1」を特定する。INDEX関数が4番目の引数M2(=2)を見て、検索対象を2番目の領域(夜間料金表)に決定する。- 最終的に、夜間料金表の「2行目、1列目」にある「13,900」を返す。
複数のテーブルを扱う際、IF関数を何重にもネストさせると数式が複雑化し、管理が大変になります。しかし、INDEX関数の領域番号を使えば、数式は非常にスマートなまま、参照する表を3つ、4つと簡単に追加できます。
これはまさにExcel関数の真髄とも言えるテクニックです。ぜひこの方法をマスターして、誰からも一目置かれるExcelの達人を目指してください。
複数のクロス表からINDEX関数で抽出する実践例はこちらです。

