XLOOKUP関数の使い方|VLOOKUPとの違い・スピル・書き換え方まで完全ガイド
XLOOKUP(エックスルックアップ)関数は、検索して対応する値を取り出す関数で、長年使われてきたVLOOKUP関数の後継・上位互換として登場しました。「左方向に検索できない」「列番号を数えるのが面倒」「エラー処理にIFERRORが必要」——VLOOKUPの弱点がまとめて解消され、しかも書き方はシンプルです。
この記事では、XLOOKUPの基本の使い方から、VLOOKUPとの違い、1つの数式で複数列を取り出すスピル、実務で効く一致モード・検索モード、そしてVLOOKUPからの書き換え対応表、つまずきやすいエラー対処とバージョン注意まで一気に解説します。
XLOOKUP関数の基本の使い方
構文はこちらです。必須は最初の3つだけです。
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
「検索値」を「検索範囲」から探し、同じ位置にある「戻り範囲」の値を返します。たとえばE2の社員番号で、A列を検索してB列の氏名を取り出すなら次のとおりです。
=XLOOKUP(E2, A2:A21, B2:B21)
VLOOKUPなら =VLOOKUP(E2, A2:C21, 2, FALSE) と書くところ。XLOOKUPは列番号も「FALSE」も不要で、検索する列と取り出す列をそのまま指定するだけです。
VLOOKUPとの違い(ここが乗り換える理由)
XLOOKUPがVLOOKUPより優れている点は、大きく4つです。
- 左側の列も取り出せる:VLOOKUPは検索値が範囲の左端にないと使えませんでしたが、XLOOKUPは検索範囲と戻り範囲を別々に指定するため、検索値の左にある列も取得できます(INDEX+MATCHが不要に)。
- 列番号を数えなくていい:戻り範囲をセル範囲で指定するので、元データに列が増減しても数式が壊れません。VLOOKUPの「列番号がズレる」事故が起きません。
- 標準が「完全一致」:XLOOKUPは何も指定しなければ完全一致です。VLOOKUPで多発した「FALSEの付け忘れで近似一致になる」ミスが起きません。
- 「見つからない場合」を直接指定できる:IFERRORで囲まなくても、4番目の引数でエラー時の表示を指定できます(次章)。
見つからないときの表示を指定する(IFERROR不要)
検索値が見つからないと、通常は #N/A が返ります。XLOOKUPは4番目の引数「見つからない場合」に表示したい値を書くだけで対応できます。
=XLOOKUP(E2, A2:A21, B2:B21, "該当なし")
空欄にしたいなら "" を指定します。VLOOKUPでは =IFERROR(VLOOKUP(…), "該当なし") と関数を二重にする必要がありましたが、XLOOKUPは1つで完結します。
スピルで複数列を一気に取り出す
XLOOKUPはスピル(数式の結果が隣のセルにあふれて表示される機能)に対応しています。戻り範囲を複数列にするだけで、対応する複数の値をまとめて取り出せます。
=XLOOKUP(E2, A2:A21, B2:D21)
この1つの数式だけで、社員番号に対応する「氏名・部署・役職」が横方向にまとめて表示されます。VLOOKUPなら3つの数式が必要だった処理が1つで済みます。数式が入っているのは先頭のセルだけで、隣のセルは結果が自動展開された「ゴースト」です(直接編集はできません)。
実務で効く「一致モード」と「検索モード」
5番目・6番目の引数を使うと、さらに便利になります。普段は省略でOKですが、次の場面で役立ちます。
| 引数 | 指定値 | 意味・使いどころ |
|---|---|---|
| 一致モード(5番目) | 0(省略時) | 完全一致 |
| -1 / 1 | 近似一致。料金表・送料表・成績ランクなど「○○以上」で区分するとき | |
| 2 | ワイルドカード(*や?)で部分一致検索 |
|
| 検索モード(6番目) | 1(省略時) | 先頭から検索 |
| -1 | 末尾から検索。同じIDが複数あるとき「最新の行」を取得したい場合に便利 |
たとえば「同じ顧客の最新の取引を取り出す」なら、検索モードに -1 を指定して下から探します。
=XLOOKUP(E2, A2:A100, D2:D100, "なし", 0, -1)
VLOOKUPからの書き換え対応表
すでにVLOOKUPで作った数式をXLOOKUPに直すときは、次の対応で考えると簡単です。
| VLOOKUPでの考え方 | XLOOKUPでの書き方 |
|---|---|
| 表全体を範囲に指定 | 検索する列と取り出す列を分けて指定 |
| 取り出す列を「列番号」で指定 | 戻り範囲をセル範囲で指定(番号不要) |
| 完全一致に「FALSE」が必要 | 不要(標準で完全一致) |
| エラー回避に IFERROR で囲む | 4番目の引数「見つからない場合」で対応 |
具体例:=VLOOKUP(E2, A2:C21, 2, FALSE) → =XLOOKUP(E2, A2:A21, B2:B21)。既存ファイルを無理にすべて書き換える必要はありませんが、メンテナンスのタイミングで順次置き換えると数式がすっきりします。
つまずきやすいエラーと対処
- #SPILL!(スピルエラー):結果が展開される先のセルに、すでに何かデータが入っていると出ます。展開先を空けると解消します。
- #VALUE!:検索範囲と戻り範囲の高さ(行数)が違うと発生します。例:検索範囲
A2:A21に対し戻り範囲B2:B22はNG。同じ行数にそろえます。 - #N/A:検索値が見つからないとき。これは正常な反応なので、4番目の引数「見つからない場合」で表示を指定します。見つからないはずがないのに出るなら、VLOOKUPが#N/Aになる原因と同じく、型違い・余分なスペース・全角半角のズレを疑ってください。
- #NAME?:関数名が認識されていません。XLOOKUPに対応していない古いExcelで開いた可能性が高いです(次章)。
使えるバージョンと、配布時の注意
XLOOKUP関数は Microsoft 365 と Excel 2021 以降で使えます。Excel 2019・2016などで開くと #NAME? エラーになり、機能しません。
そのため、社外や不特定多数に配るファイルでは注意が必要です。相手のExcelが古い可能性があるなら、(1) 従来どおりVLOOKUP(やINDEX+MATCH)で作る、(2) XLOOKUPで計算した後に結果を「値として貼り付け」て関数を消す、のいずれかが安全です。社内で全員がMicrosoft 365なら、新規の数式はXLOOKUPで書くのがおすすめです。
まとめ
XLOOKUPは、VLOOKUPの「左に検索できない」「列番号がズレる」「FALSE忘れ」「IFERRORが必要」をまとめて解決する上位互換の関数です。基本は =XLOOKUP(検索値, 検索範囲, 戻り範囲) の3つだけ。見つからない場合は4番目の引数、複数列はスピル、最新行は検索モード-1——と段階的に使いこなせます。
唯一の注意はバージョン互換(2019以前は不可)。配布ファイルではVLOOKUP併用か値貼り付けで対応しましょう。乗り換えに迷うなら、まず新規の数式から試すのが安全です。
関連して、VLOOKUP関数の使い方、VLOOKUPが#N/Aになる原因と対処、一意のリストを作るUNIQUE関数も合わせてご覧ください。