検索・参照
XLOOKUP関数の使い方・読み方
読み方:XLOOKUP は「エックスルックアップ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)
XLOOKUPは、表から値を探して、対応する値を返す関数です。やることはVLOOKUPと同じですが、VLOOKUPの弱点をひと通り解消した後継関数として作られています。
このページの中身(27項目)
この記事の書式と対応環境の出どころ(2026-08-26 確認)
- Google スプレッドシート ヘルプ:公式の書式は
XLOOKUP(検索キー, 検索範囲, 結果の範囲, 見つからない場合の値, [一致モード], [検索モード])
https://support.google.com/docs/answer/12405947 - Microsoft サポート:XLOOKUP 関数(2021 以降で使えます)
https://support.microsoft.com/ja-jp/excel/functions/xlookup-function
関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。
新しく数式を書くなら、こちらを使うほうが素直です。

書式
=XLOOKUP(検索キー, 検索範囲, 結果範囲, [見つからない場合], [一致モード], [検索モード])
| 引数 | 内容 |
|---|---|
| 検索キー | 探したい値 |
| 検索範囲 | 探しに行く1列(または1行)だけの範囲 |
| 結果範囲 | 返したい値が入っている範囲 |
| 見つからない場合 | ヒットしなかったときに返す値。省略すると #N/A |
| 一致モード | 省略時は完全一致。省略でいい |
| 検索モード | 省略時は上から検索 |
VLOOKUPと違って、検索する列と返す列を別々に指定します。ここが最大の違いです。
基本の使い方
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 商品名 | 価格 |
| 2 | A-101 | ボールペン | 150 |
| 3 | A-102 | ノート | 320 |
| 4 | B-201 | ハサミ | 480 |
「B-201」の商品名を取り出します。
=XLOOKUP("B-201", A2:A4, B2:B4)
結果:ハサミ
A列から探して、B列を返す。読んだままの意味になります。列番号を数える必要がありません。

VLOOKUPより優れている点
1. 左方向にも検索できる
VLOOKUPは範囲の左端列しか検索できません。「商品名から商品コードを引く」ことができませんでした。
XLOOKUPは検索範囲と結果範囲が独立しているので、位置関係を気にしません。
=XLOOKUP("ハサミ", B2:B4, A2:A4) → B-201
2. 列を挿入しても壊れない
VLOOKUPは「左から3番目」という位置で指定するため、表の途中に列を挿入すると数式が別の列を指してしまいます。
XLOOKUPは範囲そのものを指定するので、列を挿入しても範囲が自動で追従します。運用中に壊れないのが実務では大きいです。
3. 見つからないときの表示を指定できる
VLOOKUPでは IFERROR で包む必要がありました。
=IFERROR(VLOOKUP(E2, A:C, 2, FALSE), "該当なし")
XLOOKUPは4つ目の引数で直接指定できます。
=XLOOKUP(E2, A:A, B:B, "該当なし")
IFERROR は数式全体のエラーを握りつぶすので、範囲指定のミスまで隠してしまいます。XLOOKUPの4つ目の引数は「見つからなかった場合」だけを扱うため、他のエラーはちゃんとエラーとして表面化します。この違いは地味ですが重要です。
4. 複数の列をまとめて返せる
結果範囲を複数列にすると、その列数ぶんが一度に返ります。
=XLOOKUP("B-201", A2:A4, B2:C4) → ハサミ | 480
商品名と価格が横並びで一度に出ます。VLOOKUPだと数式を2つ書く必要がありました。
下から検索する
同じ検索キーが複数ある場合、通常は最初に見つかったものが返ります。「最新の1件が欲しい」ときは6つ目の引数に -1 を指定します。
=XLOOKUP(E2, A:A, B:B, "", 0, -1)
日付順に追記していく履歴表から最新の状態を取り出す、という使い方ができます。
注意点
古いExcelでは使えません
スプレッドシートでは問題なく使えますが、Excelで開く可能性のあるファイルでは注意が必要です。Microsoft 365 と Excel 2021 以降でのみ対応しています。取引先とファイルをやり取りする場合は、VLOOKUP のままにしておくほうが無難な場面もあります。
検索範囲と結果範囲の行数は揃える必要があります
A2:A100 と B2:B50 のようにずれていると #VALUE! になります。
VLOOKUPからの置き換えで詰まるところ
XLOOKUPはVLOOKUPの上位互換として紹介されることが多いのですが、引数の考え方が根本的に違うため、慣れるまでは戸惑います。違いを整理しておくと移行が早くなります。
最大の違いは、範囲の指定の仕方です。VLOOKUPは「検索する列を含んだ表全体」をひとつの範囲として渡し、そこから何列目を返すかを数字で指定しました。XLOOKUPは「検索する列」と「返す列」を別々に指定します。数字を数える必要がないので、列を挿入しても壊れません。VLOOKUPで最も多い事故が構造的に起きなくなる、というのが実務上いちばん大きな利点です。
次の違いは、完全一致が既定であることです。VLOOKUPは第4引数を省略すると近似一致になり、意図しない値が返る事故が起きていました。XLOOKUPは何も指定しなければ完全一致で動きます。省略して安全なほうに倒れる設計になっています。
三つ目は、見つからないときの処理が組み込まれていることです。VLOOKUPではIFERRORで包む必要がありましたが、XLOOKUPは引数のひとつとして「見つからないときに返す値」を渡せます。数式が短くなるだけでなく、IFERRORで本当のエラーまで隠してしまう危険も避けられます。
四つ目は、検索する方向を選べることです。上から探すか下から探すかを指定できるため、同じキーが複数ある表から最新の1件を取り出す、といった処理が単独でできます。VLOOKUPでは常に一番上の行しか取れませんでした。
複数の列をまとめて返す
XLOOKUPの機能で見落とされやすいのが、返す範囲に複数列を指定できる点です。商品コードから商品名と単価と在庫数を一度に取り出したい場合、VLOOKUPなら3本の数式を書くことになりますが、XLOOKUPなら1本で済みます。
返す範囲を複数列にすると、結果が横方向にあふれて表示されます。数式を入れたセルの右側が空いている必要があるので、あらかじめ空けておいてください。既に何か入っていると、あふれられずにエラーになります。
この書き方には速度面の利点もあります。検索の処理が1回で済むためです。行数の多い表で3本のVLOOKUPを書くと、同じ検索を3回繰り返すことになります。列数が増えるほど差が出ます。
同じ考え方で、行方向に返すこともできます。横に並んだ表から該当する列を丸ごと取り出したい場合、HLOOKUPを使わずにXLOOKUPで書けます。検索範囲と返す範囲の向きさえ揃っていれば、縦でも横でも同じように動きます。
一致モードを使い分ける
XLOOKUPには一致の仕方を指定する引数があり、これを理解すると使える場面が広がります。
既定は完全一致です。日常の検索はこれで足ります。
次に、次に小さい値または次に大きい値を探すモードがあります。料金表のように「◯円以上◯円未満」で区分が変わる表では、これを使います。VLOOKUPの近似一致に相当しますが、昇順に並んでいなくても動くという違いがあります。並べ替えを前提にしなくてよいぶん、事故が減ります。
さらに、ワイルドカードを使うモードがあります。部分一致で検索したい場合に指定します。既定ではワイルドカードは効かないので、明示的に有効にする必要があります。ここを知らないと「アスタリスクを書いたのに効かない」と悩むことになります。
検索の方向を指定する引数も別にあります。既定は先頭から末尾に向かって探しますが、逆向きを指定すれば末尾から探します。履歴の表から最新のレコードを取り出す用途では、これが決定的に便利です。
使えない環境での代替
XLOOKUPは比較的新しい関数のため、古いExcelでは使えません。ファイルを他の人と共有する場合、相手の環境で開けるかどうかを先に確認してください。XLOOKUPを含むファイルを古い環境で開くと、数式がエラーとして表示されます。
代替としては、INDEXとMATCHの組み合わせが定番です。どの環境でも動き、左方向の検索もできます。書き方は少し長くなりますが、考え方はXLOOKUPと同じで「検索する列」と「返す列」を別に指定します。→ INDEX関数の使い方 / MATCH関数の使い方
社内で共有するファイルは、相手の環境に合わせて関数を選ぶという判断が必要になります。自分の環境で動くことと、配布先で動くことは別の話です。
検索を含むシートの設計
検索の関数を多用するシートでは、設計次第で保守性と速度が大きく変わります。
まず、マスタの置き場所を決めます。専用のシートを一枚用意し、そこにすべてのマスタを置きます。商品マスタ、取引先マスタ、区分の対応表。散らばっていると、どこを直せばよいか分からなくなります。
次に、マスタの範囲に名前を付けます。名前を付けておけば、数式が読みやすくなり、範囲の変更も一箇所で済みます。数式を見たときに、何を参照しているかが名前から分かります。
三つ目に、検索の回数を減らします。同じ検索を複数の列で繰り返すより、複数列を一度に返す書き方を使うほうが速くなります。あるいは、作業列に一度だけ検索結果を持たせて、以降はその列を参照します。
四つ目に、検索範囲を必要な部分に絞ります。列全体を指定すると、行数の多いシートでは負荷がかかります。
五つ目に、見つからない場合の扱いを決めておきます。未登録として表示するのか、空欄にするのか。表全体で統一してください。
この五点を最初に決めておけば、シートが大きくなっても管理できます。
マスタの整備が精度を決める
検索が正しく動くかどうかは、マスタの状態で決まります。数式をいくら工夫しても、マスタが汚れていれば一致しません。
キーとなる列に重複がないか確認してください。同じコードが複数行あると、一番上の行だけが返ります。意図しない値が返り続けることになります。件数を数える関数で、二以上のものがないかを確認できます。
前後の空白が入っていないか確認してください。取り込んだデータでは頻繁に混入します。文字数を数えれば分かります。
型が揃っているか確認してください。数値であるべき列に文字列が混ざっていると、一致しません。数値だけを数えた件数と全体の件数を比べれば分かります。
表記が統一されているか確認してください。全角と半角、大文字と小文字、旧字体と新字体。マスタの側で統一しておけば、検索する側でも揃えるだけで済みます。
これらの確認を、マスタのシートに常設しておくことをおすすめします。件数と重複と型の確認を上部に並べておけば、マスタを更新するたびに状態が見えます。
マスタが汚れると、それを参照するすべての処理が影響を受けます。整備の優先度は高く見積もってください。
そのまま使える型を5つ
見つからないときの値を指定する
=XLOOKUP($A2,$F$2:$F$100,$H$2:$H$100,"未登録")
VLOOKUPでは IFERROR で包む必要がありました。XLOOKUPは4つ目の引数でそのまま指定できます。数式が短くなるぶん、後から読むのが楽になります。
右から左に引く
=XLOOKUP($A2,$H$2:$H$100,$F$2:$F$100,"")
検索する列と返す列を別々に指定するため、位置関係を問いません。VLOOKUPで表を作り直していた場面が、そのまま解決します。
複数の列をまとめて返す
=XLOOKUP($A2,$F$2:$F$100,$G$2:$I$100,"")
返す範囲に複数列を渡すと、その分がまとめて返ります。右方向に数式をコピーする必要がありません。列を挿入しても壊れません。
複数条件で引く
=XLOOKUP(1,($F$2:$F$100=$A2)*($G$2:$G$100=$B2),$I$2:$I$100,"")
条件どうしを掛け合わせると、両方を満たす行だけが 1 になります。それを検索値 1 で拾う書き方です。条件を増やすときは、掛け算を足していきます。
下から探す
=XLOOKUP($A2,$F$2:$F$100,$H$2:$H$100,"",0,-1)
6つ目の引数に -1 を指定すると、末尾から検索します。同じ値が複数あるとき、最新の行を取りたい場面で使います。
引数を表で押さえる
| 引数 | 名前 | 指定するもの | 省略時 |
|---|---|---|---|
| 1 | 検索値 | 探したい値 | 必須 |
| 2 | 検索範囲 | 探す先の1列(または1行) | 必須 |
| 3 | 戻り範囲 | 返したい列 | 必須 |
| 4 | 見つからない場合 | 代わりに返す値 | エラー |
| 5 | 一致モード | 0 完全一致 | 0 |
| 6 | 検索モード | 1 先頭から | 1 |
検索範囲と戻り範囲は行数を揃える
$F$2:$F$100 と $H$2:$H$101 のように行数がずれていると、エラーになるか、ずれた行が返ります。範囲を後から広げるときは、両方を同時に直してください。
一致モードの 2 は使いどころが限られる
2 を指定するとワイルドカードが使えます。"東京*" のような前方一致が書けますが、意図しない行を拾いやすくなります。使う場合は、結果の件数を必ず確認してください。
検索モードの 2 と -2 は二分探索
並べ替え済みの大きな表で速くなります。ただし、並んでいない表に使うと誤った値を静かに返します。速度が問題になっていないなら、指定しないでください。
壊れ方を分類する
#N/A が返る
4つ目の引数を指定していません。まず "" か "未登録" を入れてください。それでも意図と違う場合、検索値の型か空白の問題です。
#VALUE! が返る
検索範囲と戻り範囲の行数が違います。両方の末尾行を確認してください。
#NAME? が返る
その環境がXLOOKUPに対応していません。共有先が古い場合に起きます。VLOOKUPかINDEX+MATCHに書き換える必要があります。
値は返るが古い行が返る
同じ値が複数あり、先頭が拾われています。最新を取りたいなら6つ目の引数に -1 を指定してください。
VLOOKUPからの書き換え表
| VLOOKUPの書き方 | XLOOKUPでの書き方 |
|---|---|
VLOOKUP(A2,F:H,3,FALSE) | XLOOKUP(A2,F:F,H:H,"") |
IFERROR(VLOOKUP(...),"") | 4つ目の引数に "" |
| 左方向は不可 | 範囲を入れ替えるだけ |
| 列番号を直書き | 列を範囲で指定 |
一括で書き換えないこと
動いているVLOOKUPを全部XLOOKUPに置き換える作業は、事故のもとです。新しく作る部分から切り替え、既存は触らないでください。
共有先の環境を先に確認する
社内だけで使うファイルか、社外に渡すファイルかで判断が変わります。渡す相手の環境が分からないときは、VLOOKUPのままにしておくほうが安全です。
書き換えたら注記を残す
シートのどこかに「この列はXLOOKUPを使用。古い環境では表示されません」と一行書いておくと、受け取った側が困りません。
大きな表で使うときの注意
列全体の指定は避ける
F:F は書くのが楽ですが、空行まで検索対象になります。行数が多い表では $F$2:$F$5000 のように区切ってください。
同じ検索を繰り返さない
同じ検索値で3列引くなら、戻り範囲に3列まとめて渡す形にしてください。数式の数が3分の1になります。
参照先が別ファイルなら取り込む
別ファイル参照は、開くたびに読み込みが走ります。頻繁に使う表なら、同じファイル内にコピーしておくほうが軽くなります。
確定したデータは値に変える
過去分の集計は、値貼り付けにしてください。数式が残っている限り、再計算の対象になり続けます。
INDEX+MATCH との使い分け
XLOOKUPが使えない環境では、INDEX+MATCH が代わりになります。両者の関係を整理しておきます。
同じことを書く二通り
=XLOOKUP($A2,$F$2:$F$100,$H$2:$H$100,"")
=IFERROR(INDEX($H$2:$H$100,MATCH($A2,$F$2:$F$100,0)),"")
やっていることは同じです。XLOOKUPのほうが短く、意図が読み取りやすくなります。
INDEX+MATCH が有利な場面
行と列の両方を検索する場合です。
=INDEX($G$2:$J$100,MATCH($A2,$F$2:$F$100,0),MATCH($B$1,$G$1:$J$1,0))
縦横の交差点を取る形は、この書き方が定番です。XLOOKUPを二重にしても書けますが、読みにくくなります。
MATCH だけを使う場面
位置だけが知りたい場合です。何行目にあるかが分かれば十分なら、INDEX は不要です。
どちらも使えないとき
環境が古く、配列も使えない場合です。作業列を作って IF で判定するか、オートフィルタで対応してください。
縦横の検索を一つの数式で書く
月別・拠点別のような二次元の表から値を取る場面は、実務で頻出します。
XLOOKUP を二重にする
=XLOOKUP($A2,$F$2:$F$100,XLOOKUP($B$1,$G$1:$J$1,$G$2:$J$100),"")
内側で列を選び、外側で行を選びます。慣れると読めますが、初見では追いにくい形です。
INDEX と MATCH を組む
=INDEX($G$2:$J$100,MATCH($A2,$F$2:$F$100,0),MATCH($B$1,$G$1:$J$1,0))
行と列を別々に探すため、構造が分かりやすくなります。二次元の検索はこちらを勧めます。
見出しの表記ゆれに注意する
列見出しを検索キーにする場合、「1月」と「1月」、「2026/1」と「2026年1月」が混在すると引けません。見出しの行は、手入力ではなく数式で生成するほうが安全です。
見つからないときの扱い
二重にした場合、内側と外側のどちらで失敗したのかが分かりません。切り分けるときは、内側だけを別のセルに書いて確認してください。
実務での使いどころ
マスタから複数項目を一度に引く
=XLOOKUP($A2,商品マスタ!$A$2:$A$500,商品マスタ!$B$2:$E$500,"")
商品コードから、名称・単価・区分・担当をまとめて返します。VLOOKUPを4回書いていた作業が1回になります。
直近の実績を取る
=XLOOKUP($A2,$F$2:$F$1000,$H$2:$H$1000,"",0,-1)
履歴データから最新の1件を取ります。並べ替えずに済むため、元データを触りません。
区分表を引く
=XLOOKUP($A2,$F$2:$F$10,$G$2:$G$10,"",-1)
5つ目の引数 -1 は「検索値以下で最も近い値」です。送料や手数料の段階表に使えます。表は昇順に並べておいてください。
未登録を洗い出す
=XLOOKUP($A2,$F$2:$F$500,$F$2:$F$500,"未登録")
戻り範囲に検索範囲と同じ列を指定すると、存在確認になります。フィルタで「未登録」だけを抽出できます。
引き継ぎと保守
使った関数を明記する
XLOOKUPは新しい関数です。受け取った人の環境で開けない可能性があります。シート内に「XLOOKUPを使用」と一行書いておくだけで、原因の特定が早くなります。
範囲に名前を付ける
=XLOOKUP($A2,商品コード,商品名,"")
範囲に名前を定義すると、数式が短く読みやすくなります。参照先が増減しても、名前の定義を直すだけで済みます。
数式を1か所にまとめる
同じ検索を何十か所にも書かないでください。1か所に書いて、他はその結果を参照する形にすると、直す場所が1つになります。
変更履歴を残す
参照先の表を変えたら、日付と内容をメモしてください。数式が壊れたときに、いつ何が変わったかをたどれます。
確定分は値にする
過去のデータを引いている数式は、締めた時点で値に変換してください。参照先を消しても壊れなくなります。
「検索・参照」の関数を全体から見る
検索・参照に含まれる関数を、全体から見ておきます。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに16本あります。
| 記事 |
|---|
| ADDRESS |
| CHOOSE |
| COLUMN |
| COLUMNS |
| HLOOKUP |
| IMPORTDATA |
| IMPORTHTML |
| IMPORTRANGE |
| INDEX |
| INDIRECT |
| MATCH |
| OFFSET |
| ROW |
| ROWS |
| VLOOKUP |
| XMATCH |
このカテゴリで共通するつまずき
検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。
どれを使うかの決め方
検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。
迷ったときは
→ 全関数の一覧 に目的別の索引があります。
このサイトの収録状況
全201本を、次のカテゴリに分けて収録しています。
| カテゴリ | 記事数 |
|---|---|
| 目的別 | 51本 |
| 集計 | 47本 |
| 文字列 | 31本 |
| 日付 | 19本 |
| 検索・参照 | 15本 ←この記事 |
| 条件 | 15本 |
| 機能 | 12本 |
| 配列・抽出 | 10本 |
| 関数一覧 | 1本 |
探し方の順番
関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。
記事の構成
どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。
数式を書く前の手順
手順を分けると、どこで詰まっているかが分かります。
1. 出したい結果を一文で書く
「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。
2. 元データの型を確認する
検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。
3. 空欄と0の扱いを決める
未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。
4. 条件の数を数える
検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。
5. 共有先の環境を確認する
新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。
6. 1行だけ書いて確認する
全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。
どの関数でも共通する確認
以下は、どの関数を使っていても同じです。
参照を固定したか
下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。
範囲の行数が揃っているか
複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。
型が揃っているか
=ISNUMBER(A2)
数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。
前後に空白が入っていないか
=LEN(A2)&" / "&LEN(TRIM(A2))
数が違えば、余分な空白が入っています。見た目では判別できません。
別の方法で検算したか
同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。
最終行まで確認したか
一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。
引き継ぐときに残すこと
数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。
何を出している数式か
一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。
どの表を参照しているか
参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。
該当しないときの扱い
空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。
触ってはいけない場所
列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。
使った関数の対応環境
新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。
確定した期間は値にする
締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。
まとめ
- 書式は
=XLOOKUP(検索キー, 検索範囲, 結果範囲, 見つからない場合) - 列番号を数えなくていい
- 左方向にも検索できる
- 列の挿入で壊れない
- 見つからないときの値を直接指定できる
新規に作るならXLOOKUP。既存ファイルの保守や、古いExcelとの互換が要るならVLOOKUP。詳しい使い分けは VLOOKUPとXLOOKUPの違い にまとめました。