XLOOKUPの入れ子を図解|行と列の2条件で交点を検索する方法

XLOOKUPの入れ子を図解|行と列の2条件で交点を検索する方法

XLOOKUPを入れ子にすると、「券種」と「年齢区分」のような縦横2つの見出しから、交点の金額を取り出せます。内側のXLOOKUPで1行を選び、外側のXLOOKUPでその行から1列を選ぶ、という順番で読むと理解しやすくなります。

目次

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

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

XLOOKUPの入れ子(ネスト)で縦横検索する基本式

サンプルの結果セルB4には次の式を入力します。

B4に入力:XLOOKUPの入れ子で縦横検索(行と列の交点)
数式=XLOOKUP(B3,$B$7:$D$7,XLOOKUP(B2,$A$8:$A$10,$B$8:$D$10))
ひとことで内側で「行」を選び、外側でその行の「列」を選ぶ
B3
外側の検索値です。列見出し(年齢区分)で探す条件で、サンプルは「小学生」です
$B$7:$D$7
外側の検索範囲です。横に並ぶ列見出し(大人・中学生・小学生)です
XLOOKUP(B2,$A$8:$A$10,$B$8:$D$10)
外側の戻り範囲として、内側のXLOOKUPが返す「選んだ行の3つの料金」を渡します
データの流れ
① 内側:券種「2日」の行を選ぶ(黄色の3つ)
B913,600C910,900D97,500
▼
② 外側:年齢区分「小学生」の列を選ぶ
大人13,600中学生10,900小学生7,500
▼
③ 行と列の交点の料金が返る結果
B47,500
場所役割
B2縦の行見出しから探す条件
B3横の列見出しから探す条件
A8:A10縦に並ぶ行見出し
B7:D7横に並ぶ列見出し
B8:D10見出しを含まない料金の範囲

① 内側:券種「2日」の行を選ぶ → ② 外側:「小学生」の列を選ぶ

券種大人中学生小学生
1日8,5007,0004,700
2日13,60010,9007,500
3日17,80014,3009,800
行と列の交点が結果です。赤枠の7,500がB4へ返ります。

内側のXLOOKUPは「1行」を返す

空きセルに入力(確認用):内側のXLOOKUPだけ
数式=XLOOKUP(B2,$A$8:$A$10,$B$8:$D$10)
ひとことで行見出しを探し、見つけた行の3つの料金を横並びで返す
B2
検索値です。行見出し(券種)で探す条件で、サンプルは「2日」です
$A$8:$A$10
検索範囲です。縦に並ぶ行見出し(1日・2日・3日)です
$B$8:$D$10
戻り範囲は3列です。そのため、見つけた行の料金が3つ、右へ並んで返ります(スピル)
データの流れ
① 行見出しから「2日」を探す(黄色)
A81日A92日A103日
▼
② その行の3つの料金が、横に並ぶ結果
F213,600G210,900H27,500

この部分は、B2の条件を縦のA8:A10から探します。戻り範囲がB8:D10の3列なので、見つけた行の3つの料金が横並びで返ります。確認するときは元の表から離れた空きセルへ入力し、右隣2セルを空けてください。

ポイント検索範囲が縦1列だからといって、内側の結果が縦1列になるわけではありません。結果の形は戻り範囲によって決まります。

外側のXLOOKUPで、その行の列を選ぶ

外側はB3をB7:D7の列見出しから検索します。その位置にある料金を、内側で取り出した1行から返します。サンプルではB2が「2日」、B3が「小学生」なので、結果は7,500です。

注意内側の出力が3列なら、外側の検索範囲も3列にそろえます。片方だけ4列に広げたり、見出しを1列ずらしたりすると、エラーや誤った値の原因になります。

#N/Aになる場合の表示を決める

行・列のどちらかの見出しが見つからない場合を「該当なし」と表示するには、全体をIFNAで囲めます。

B4に入力:見つからないときは「該当なし」(IFNA)
数式=IFNA(XLOOKUP(B3,$B$7:$D$7,XLOOKUP(B2,$A$8:$A$10,$B$8:$D$10)),"該当なし")
ひとことで縦横検索の式が #N/A になったときだけ、「該当なし」と表示する
XLOOKUP(B3,…,XLOOKUP(B2,…))
先ほどの縦横検索の式そのものです
"該当なし"
行か列の見出しが見つからず #N/A になったときに、代わりに表示する文字です
補足どちらの見出しが原因かは、内側の式だけを別のセルに入れて確認します。
注意IFNAは#N/Aを置き換えます。元の料金セル自体に#N/Aが入っている場合も同じ表示になる点には注意してください。入力ミスを調べるときは一度IFNAを外し、内側の式から確認すると原因を切り分けられます。
注意内側の戻り値を「該当なし」という1セルの文字にすると、外側の検索範囲と大きさが合わなくなる場合があります。入れ子では「どちらの検索が失敗したか」も意識します。

INDEX+MATCHでも同じ縦横検索ができる

対応バージョンExcel 2019・2016など、XLOOKUPが使えない環境では次の式を使えます。
B4に入力:INDEX+MATCHで縦横検索(Excel 2019・2016向け)
数式=INDEX($B$8:$D$10,MATCH(B2,$A$8:$A$10,0),MATCH(B3,$B$7:$D$7,0))
ひとことでMATCHで行番号と列番号を求め、INDEXで交点を返す
$B$8:$D$10
料金の表(見出しを含まない3行×3列)です
MATCH(B2,$A$8:$A$10,0)
行番号です。B2(券種)が行見出しの何番目かを返します。最後の 0 は完全一致の指定です
MATCH(B3,$B$7:$D$7,0)
列番号です。B3(年齢区分)が列見出しの何番目かを返します
データの流れ
① 行番号と列番号をMATCHで求める
行番号2列番号3
▼
② 表の中の、その行と列の交点を返す結果
B47,500
ポイント2つのMATCHが行番号と列番号を求め、INDEXが交点を返します。MATCHの最後の0は完全一致です。利用するExcelや、管理する人が読みやすい書き方で選びましょう。

XLOOKUPの入れ子で縦横検索ができない・エラーになるときの確認表

症状主な原因確認と対処
#N/A行(B2)か列(B3)の見出しが、表の見出しと一致していない(余分な空白・表記の違いなど)見出しを表からコピーして試す。内側の式だけを別のセルに入れて、どちらが原因か切り分ける
#SPILL!内側の式だけを入力したとき、右隣の2セルが空いていない右隣の2セルを空ける。元の表から離れた空きセルで確認する
違う列の値が返る外側の検索範囲(B7:D7)と、内側の戻り範囲(B8:D10)の列の数や順番がずれている見出しの範囲と料金の範囲を、同じ列の幅・同じ順番にそろえる
#NAME?XLOOKUPが使えないExcel(2019・2016など)で開いているINDEX+MATCHの式を使う

XLOOKUPの複数条件・クロス抽出・全件抽出との違い

この例は「行見出し1つ+列見出し1つ」で1セルを探します。商品名とサイズの両方で同じ一覧の行を探す方法はXLOOKUPとIF・複数条件の使い分け、商品・単価など複数の行条件を使うクロス検索はクロス抽出の実例で説明しています。

ポイント行見出しや列見出しが重複している場合、通常は最初の一致を使います。重複分の合計が必要なら、1セルを返す検索式ではなくSUMIFSなどの集計方法を検討してください。

次のステップ:商品と倉庫のクロス抽出・複数条件へ進む

仕様の確認:Microsoft公式・XLOOKUP関数

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

この記事を書いた人

コメント

コメントする

目次