XLOOKUP関数の使い方・読み方|VLOOKUPより簡単な検索関数

執筆者:

カテゴリ:

XLOOKUP関数の使い方・読み方のイメージ

検索・参照

XLOOKUP関数の使い方・読み方

Excel関数辞典

読み方:XLOOKUP は「エックスルックアップ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

XLOOKUPは、表から値を探して、対応する値を返す関数です。やることはVLOOKUPと同じですが、VLOOKUPの弱点をひと通り解消した後継関数として作られています。

使える環境Excel○Googleスプレッドシート○
このページの中身(27項目)
  1. 書式
  2. 基本の使い方
  3. VLOOKUPより優れている点
  4. 下から検索する
  5. 注意点
  6. VLOOKUPからの置き換えで詰まるところ
  7. 複数の列をまとめて返す
  8. 一致モードを使い分ける
  9. 使えない環境での代替
  10. 検索を含むシートの設計
  11. マスタの整備が精度を決める
  12. そのまま使える型を5つ
  13. 引数を表で押さえる
  14. 壊れ方を分類する
  15. VLOOKUPからの書き換え表
  16. 大きな表で使うときの注意
  17. INDEX+MATCH との使い分け
  18. 縦横の検索を一つの数式で書く
  19. 実務での使いどころ
  20. 引き継ぎと保守
  21. 「検索・参照」の関数を全体から見る
  22. このサイトの収録状況
  23. 数式を書く前の手順
  24. どの関数でも共通する確認
  25. 引き継ぐときに残すこと
  26. まとめ
  27. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

新しく数式を書くなら、こちらを使うほうが素直です。

XLOOKUP関数の使い方の記事構成図
XLOOKUP関数の使い方:この記事で扱う内容

書式

=XLOOKUP(検索キー, 検索範囲, 結果範囲, [見つからない場合], [一致モード], [検索モード])
引数内容
検索キー探したい値
検索範囲探しに行く1列(または1行)だけの範囲
結果範囲返したい値が入っている範囲
見つからない場合ヒットしなかったときに返す値。省略すると #N/A
一致モード省略時は完全一致。省略でいい
検索モード省略時は上から検索

VLOOKUPと違って、検索する列と返す列を別々に指定します。ここが最大の違いです。

基本の使い方

ABC
1商品コード商品名価格
2A-101ボールペン150
3A-102ノート320
4B-201ハサミ480

「B-201」の商品名を取り出します。

=XLOOKUP("B-201", A2:A4, B2:B4)

結果:ハサミ

A列から探して、B列を返す。読んだままの意味になります。列番号を数える必要がありません。

XLOOKUP関数の使い方の要点図
XLOOKUP関数の使い方

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の違い にまとめました。

関連する関数