XLOOKUPへの乗り換えガイド+動かない・#NAME?・#SPILL!の直し方【VLOOKUPの上位互換】
「XLOOKUPに乗り換えたら #NAME? になった…」
「XLOOKUPを書いたら #SPILL! が出た…」
「そもそもVLOOKUPからどう書き換えればいいのか分からない…」
💡 関連記事:
- VLOOKUPで#N/Aが出る5つの原因と解決法 ← VLOOKUPで
#N/Aに繰り返し困っているなら、XLOOKUPで根治できます- INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面 ← XLOOKUPが使えないバージョンで、VLOOKUPの弱点を旧来の方法で克服したいならこちら
- Excelの主要エラー6種 ←
#NAME?など主要エラーの早見表(#SPILL!はスピル固有のエラーのため本記事で扱います)
症状
XLOOKUPを書いたら #NAME? になる、#SPILL! になる、#N/A の代わりに空欄を返したい、そもそも VLOOKUP からどう書き換えるのか分からない——そんな状態になっていませんか?
即答
XLOOKUPは VLOOKUP の上位互換の検索関数です。Microsoft 365 / Excel 2021 以降で使え、既定が完全一致・左方向も検索可・列番号指定が不要・見つからない時は第4引数でそのまま処理できます(IFERROR不要)。動かない主因は「バージョン非対応で #NAME?」「書き出し先がブロックされて #SPILL!」の2つです。
なぜ起きるのか
XLOOKUPは「見つからない時の返り値」まで1つの関数の中に書ける新しい設計で、VLOOKUPの制約(左端列縛り・列番号指定・近似一致が既定・IFERROR併用が前提)を仕様レベルで作り直したものです。新しい関数のぶん使えるExcelのバージョンが限定されるのが #NAME? の原因、そしてXLOOKUPはスピル(結果が複数セルに自動でこぼれて広がる仕組み)を前提にしているため、書き出し先が塞がっていると #SPILL! になるのが設計上の制約です。
確認手順
症状から、確認すべき節へ進んでください。
#NAME?が出る → 「① バージョン非対応」を確認#SPILL!が出る → 「② 書き出し先に既存データ」を確認#N/Aの代わりに『該当なし』などのメッセージを出したい → 「③if_not_found」を確認- そもそも VLOOKUP から書き換え方が分からない → 「④ 書き換え早見表」へ
- 左方向に検索したい/末尾から検索したい/近似一致で探したい → 「もう一歩進んだ使い方(
match_mode/search_mode)」へ

📌 ポイント: 乗り換え目的でも、エラーで困っている場合でも、この記事1本で完結します。
XLOOKUPの基本構文(30秒で確認)
必須の3引数だけで基本形が書けます。オプションを足せばフル引数になります。
=XLOOKUP(検索値, 検索範囲, 返す範囲)
=XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない時の値], [一致モード], [検索モード])
| 引数 | 必須/オプション | 意味 | 既定値 |
|---|---|---|---|
lookup_value(検索値) | 必須 | 探したい値 | — |
lookup_array(検索範囲) | 必須 | 検索値を探す範囲 | — |
return_array(返す範囲) | 必須 | 見つかった行から返す範囲 | — |
if_not_found(見つからない時の値) | オプション | 見つからない時に返す値 | 省略時は #N/A |
match_mode(一致モード) | オプション | 完全一致/近似一致の種類 | 0(完全一致) |
search_mode(検索モード) | オプション | 検索する方向 | 1(先頭から) |
📌 ポイント: 必須は3つ。オプション3つは「必要な時だけ足す」設計です。
match_mode/search_modeの詳細は後の「もう一歩進んだ使い方」で扱います。
VLOOKUPとの決定的な違い4つ(乗り換え動機)
VLOOKUPの資産や情報量は今も豊富です。ここでは「新しく書くならXLOOKUPが有利な理由」を4つに絞って整理します。
- 既定が完全一致 — VLOOKUPは既定が近似一致(第4引数を
FALSEにし忘れると事故る)ですが、XLOOKUPは何も指定しなければ完全一致です。 - 左方向にも検索できる — VLOOKUPは検索範囲の左端列しか検索できません。XLOOKUPは検索範囲と返す範囲を別々に指定するので、左方向の検索に INDEX+MATCH を組む必要がなくなります。
- 列番号指定が不要 — VLOOKUPは「左から何列目」を数値で指定するため、表に列を挿入すると数式がズレて事故りやすいです。XLOOKUPは返す範囲を直接指定するので、列番号による事故がありません。
- 「見つからない時」を第4引数で処理できる — VLOOKUPは見つからないと
#N/Aを返すだけなので IFERROR でラップする必要がありました。XLOOKUPは第4引数if_not_foundに返したい値を直接書けます。
📌 ポイント: VLOOKUP でよくハマる4つの落とし穴を、XLOOKUP は仕様レベルで潰しています。とくに
#N/Aに繰り返し困っている場合は、VLOOKUPで#N/Aが出る5つの原因と解決法 の対処より先に、XLOOKUPへの乗り換え自体で根治できないか検討する価値があります。
① #NAME? が出るとき = バージョン非対応
症状
XLOOKUPを書いたのに #NAME? エラーになる、あるいは関数名を入力しても補完候補に XLOOKUP が出てこない。
なぜ
XLOOKUPは Microsoft 365 / Excel 2021 以降で追加された比較的新しい関数です。それより前のバージョン(Excel 2019 / 2016 / 2013 など)では関数自体が存在せず、Excelが「知らない名前」として #NAME?(未知の名前エラー)を返します。
確認方法
使っているExcelのバージョンを確認してください(メニューの正式名称はバージョンによって変わるため、ここでは「Excelのバージョン確認方法」とだけ案内します)。関数名の入力中に補完候補が出てこない場合も、バージョン非対応のサインです。
解決方法
- Microsoft 365 / Excel 2021 以降にアップグレードできる場合はそれが最短です
- できない場合は INDEX+MATCH で代替します。INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面 を参照してください
📌 ポイント: 動かない理由がバージョンなら、書き方の問題ではないので数式を直しても直りません。他のエラーとの見分け方は Excelの主要エラー6種 の早見表も参考になります。

② #SPILL! が出るとき = 書き出し先に既存データがある
症状
XLOOKUPを書いたら #SPILL! エラーになる。
なぜ
XLOOKUPはスピル(結果が複数セルに自動で「こぼれて」広がる仕組み)を前提にした関数です。返す範囲が複数セルにまたがるとき、書き出し先のセルに既存の値・数式・書式や結合セルがあると、こぼれ先がブロックされて #SPILL! になります。数式が間違っているわけではなく、「書き出し先が塞がっている」というサインです。
確認方法
数式を入れたセルの右または下に、既存の値・数式・書式が入ったセルや結合セルがないかを確認してください。
解決方法
- 書き出し先の既存データを消す、または別の場所に移動する
- 単一値だけ欲しい場合は返す範囲を単一列(または単一セル)に絞る
- 結合セルがあれば解除する
📌 ポイント:
#SPILL!は数式が間違っているのではなく、「書き出し先が塞がっている」サインです。
③ 「見つからない」の直し方 = 第4引数 if_not_found(IFERROR不要)
症状
#N/A の代わりに「該当なし」や空欄を返したい。
なぜ
XLOOKUPは第4引数 if_not_found に指定した値を、見つからない時にそのまま返す設計です。従来のVLOOKUPのように外側から IFERROR でラップする必要がありません。
// 旧来(VLOOKUP + IFERROR)
=IFERROR(VLOOKUP(D2, A2:B5, 2, FALSE), "該当なし")
// XLOOKUP なら1本
=XLOOKUP(D2, A2:A5, B2:B5, "該当なし")
空文字を返したい場合は =XLOOKUP(D2, A2:A5, B2:B5, "") のように書きます。
📌 ポイント: 見つからない時の処理を関数の中に書けるので、式の可読性が上がります。ただし
#REF!や#VALUE!など他のエラーも一緒に握りつぶしたい場合は、IFERROR の使い方と落とし穴 の出番がまだあります。

④ VLOOKUPからXLOOKUPへの書き換え早見表(Before / After)
| やりたいこと | VLOOKUP | XLOOKUP |
|---|---|---|
| 単純な右方向検索(完全一致) | =VLOOKUP(D2, A2:B5, 2, FALSE) | =XLOOKUP(D2, A2:A5, B2:B5) |
| 見つからない時のメッセージ | =IFERROR(VLOOKUP(D2, A2:B5, 2, FALSE), "該当なし") | =XLOOKUP(D2, A2:A5, B2:B5, "該当なし") |
| 左方向に検索 | 不可(INDEX+MATCH が必要) | =XLOOKUP(D2, B2:B5, A2:A5) |
| 列挿入耐性 | 列番号指定でズレる | 列番号を使わないのでズレない |
📌 ポイント: XLOOKUPでは「検索値 → 検索範囲 → 返す範囲」の3つを別々に渡します。列番号(VLOOKUPの第3引数の数字)が消えるのが、乗り換え時にいちばん違和感を覚えるポイントです。
もう一歩進んだ使い方(match_mode / search_mode)
必須3引数で困らない範囲では、この節は読み飛ばして問題ありません。
match_mode(一致モード)
| 値 | 意味 |
|---|---|
0(既定) | 完全一致 |
-1 | 完全一致、なければ次に小さい値 |
1 | 完全一致、なければ次に大きい値 |
2 | ワイルドカード一致(* ? が使える) |
使い所は、段階的な料金表(○円以上は○%割引など) のように、範囲でマッチさせたいときです。VLOOKUPの近似一致(TRUE)と違い、「次に小さい値」(-1)と「次に大きい値」(1)を明示的に選べます。
search_mode(検索モード)
| 値 | 意味 |
|---|---|
1(既定) | 先頭から検索 |
-1 | 末尾から検索 |
2 | バイナリサーチ(昇順に並んだ範囲用) |
-2 | バイナリサーチ(降順に並んだ範囲用) |
使い所は、同じ検索値が複数ある表で 「最新のもの」を取りたいとき です(search_mode = -1)。VLOOKUPでは不可で、旧来は他の関数を組み合わせる必要がありました。
📌 ポイント: 必須3引数で困らない範囲では触らなくてOKです。近似一致・逆引きが必要になった時に思い出す引数です。
【実務でこれが起きた場面】
部署で共有していた在庫マスタが #N/A だらけになる問題があり、IFERRORでラップした式が20列に散らばっていた。XLOOKUP で if_not_found に空欄を渡す形に統一したら、式が半分の長さになり、後から入った新人にも「見つからないとき、この文字を返す」という意図が読み取れるようになった。ただし別のPC(Excel 2019)で開いたとき全セルが #NAME? になり、混乱を招いた。共有ブックで XLOOKUP を使う時は、開く側全員のバージョンを先に確認するのが実務では有効。
まとめ:判断フロー
症状(エラーの種類)で、確認すべき原因が決まります。
| 症状 | 原因 | 解決 |
|---|---|---|
#NAME? | バージョン非対応(Excel 2019 以前など) | M365/Excel 2021 以降にする、または INDEX+MATCH で代替 |
#SPILL! | 書き出し先に既存データ・結合セル | 書き出し先を空ける/返す範囲を単一に絞る |
#N/A を消したい | if_not_found 未指定 | 第4引数に返したい値を渡す |
| 書き換え方が分からない | — | ④ の書き換え早見表を参照 |
よくある質問
Q. XLOOKUPが使えないバージョンだと、どうすればいいですか?
バージョンを上げられない場合は、INDEX+MATCHで同じことができます。
A. INDEX+MATCH で代替できます。左方向の検索・列挿入耐性など、XLOOKUPが持つ強みの多くは INDEX+MATCH でも実現できます。詳しくは INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面 をご覧ください。
Q. XLOOKUPは Mac でも使えますか?
Microsoft 365 for Mac や Excel 2021 for Mac 以降であれば使えます。
A. Microsoft 365 for Mac / Excel 2021 for Mac 以降であれば使えます。ただしMac版はアップデートの反映時期がWindows版とずれることがあるため、手元の環境で実際に入力して補完候補に出るか確認するのが確実です。
Q. IFERROR は完全に要らなくなりますか?
#N/A に関しては不要になりますが、他のエラーまで一緒に隠したい場合はまだ使います。
A. #N/A については不要になります。ただし #REF! や #VALUE! など他のエラーも一緒に握りつぶしたいケースでは、IFERROR の使い方と落とし穴 がまだ有用です。
Q. VLOOKUP で #N/A が出て困っています。XLOOKUP に乗り換えるべきですか?
Microsoft 365 / Excel 2021 以降が使える環境なら、乗り換えるのが原則おすすめです。
A. Microsoft 365 / Excel 2021 以降が使える環境なら、原則イエスです。VLOOKUPで#N/Aが出る5つの原因と解決法 の対処法と併読すると、原因の切り分けと根治の両方が分かります。
Q. 段階的な料金表(○円以上は○%割引)を作りたいのですが?
match_mode = -1(完全一致、なければ次に小さい値)を使います。
A. match_mode = -1(完全一致、なければ次に小さい値)を使います。検索範囲は昇順にソートしておいてください。
Q. 同じ検索値が複数ある表で「最新のもの」を取りたいのですが?
search_mode = -1(末尾から検索)を使います。
A. search_mode = -1(末尾から検索)を使います。表の下方向に新しいデータが追加されていく構成であれば、最後に一致した行を返せます。
Q. それでも思いどおりにならない…
この手順で直らない場合はレアケースの可能性があり、AIサポートでの切り分けが近道です。
A. 記事の手順を試しても直らない場合、特定の構成だけで起きるレアケースかもしれません。AIサポートで対話的に原因を切り分けてみてください。
無料ダウンロード・登録不要のメールだけ
Excelの「詰まりどころ」早見表を1枚に。
COUNTIF・SUMIF・#N/A・エラー6種の《症状→原因→即対応》をA4一枚に凝縮。印刷して手元に。
次に読む
VLOOKUPで#N/Aが出る5つの原因と解決法【上から順に試せばOK】
VLOOKUPで#N/Aが出る原因をチェックリスト形式で5パターン解説。データ型・余白・FALSE指定・左端列・絶対参照の順に試せば、ほぼ全てのケースで原因が特定できます。
INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面【コピペで使える】
VLOOKUPでは解けない「左端列にない・列挿入でズレる・複数条件で探したい」場面を INDEX+MATCH の組み合わせで解決する方法を、コピペで使える数式と実例で解説します。
Excelの主要エラー6種【症状→原因→解決の早見表】
#VALUE! #REF! #DIV/0! #NAME? #NULL! #N/A の6種のExcelエラーを症状から逆引きできる早見表+解決法。原因と最短の直し方をまとめました。