VLOOKUPで「左側の列が取れない…」「毎回IFERRORを書くのが面倒」と感じたことはありませんか?
データの列順が変わるたびに数式を修正したり、エラー対策でネストを深くしたり。VLOOKUPの限界にぶつかっている方は多いと思います。
そんな悩みを一気に解決してくれるのが XLOOKUP関数(エックスルックアップ) です。2022年9月からGoogleスプレッドシートでも使えるようになり、今では実務でどんどん活用されています。この記事では、XLOOKUPの基本構文から実践的な応用例・エラー対処まで、サンプルつきで丁寧に解説します。
XLOOKUP関数とは?
XLOOKUP関数は、指定した範囲から値を検索し、対応するデータを返す関数です。読み方は「エックスルックアップ」。X は「eXtended(拡張された)」の意味。従来のVLOOKUP・HLOOKUPの弱点を克服するために設計されました。
Googleスプレッドシートでは2022年9月頃に追加された比較的新しい関数です。覚えれば VLOOKUP の出番がほぼなくなります。
XLOOKUPでできること
- 縦方向・横方向の両方を1つの関数で検索できる
- 検索列の左側にあるデータも取得できる(VLOOKUPでは不可)
- 見つからない場合の表示値を関数内で直接指定できる
- 複数列・複数行をまとめて返せる(スピル対応)
- 末尾からの検索(最新データの取得)ができる
対応バージョンと互換性
| アプリ | 対応状況 |
|---|---|
| Googleスプレッドシート | 2022年9月以降に作成されたシートで利用可 |
| Microsoft 365 / Excel 2021以降 | 利用可 |
| Excel 2019 以前 | 利用不可(VLOOKUPまたはINDEX+MATCHで代替) |
補足
他のメンバーが古い Excel で開く可能性がある場合は、互換性の観点から VLOOKUP を併用するか、XLOOKUP の結果を「値貼り付け」で確定させてから共有すると安全です。
XLOOKUP関数の書き方(構文と引数)
基本構文
=XLOOKUP(検索キー, 検索範囲, 結果の範囲, [見つからない場合の値], [一致モード], [検索モード])
引数が6つあるように見えますが、最初の3つだけで基本的な検索はできます。4〜6番目はオプションなので、最初は気にしなくて大丈夫です。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 検索キー | 必須 | 検索したい値(セル参照・文字列・数値など) |
| 検索範囲 | 必須 | 検索キーを探す1列または1行の範囲 |
| 結果の範囲 | 必須 | 返したいデータが入っている範囲(複数列も可) |
| 見つからない場合の値 | 任意 | 一致しない場合に返す値(省略時は #N/A) |
| 一致モード | 任意 | 0=完全一致(既定)、-1=次に小さい値、1=次に大きい値、2=ワイルドカード |
| 検索モード | 任意 | 1=先頭から(既定)、-1=末尾から、2=昇順バイナリ検索、-2=降順バイナリ検索 |
一致モードと検索モードは少し難しそうに見えますが、普段使いでは「完全一致(一致モード=0)」「先頭から検索(検索モード=1)」の既定値で十分です。後ろの応用例で、それぞれが役立つ場面を紹介します。
基本的な使い方
縦方向の検索(商品マスタから取得)
まずは一番よく使う「縦方向の検索」から見てみましょう。
たとえば、下のような商品マスタがあるとします。

E1セルに「A002」と入力されているとき、F1セルで商品名を取得するには次のように書きます。
=XLOOKUP(E1, A:A, B:B)

(P)結論: これだけで「みかん」が返ってきます。
(R)理由: 第1引数で検索キー(E1)を、第2引数で検索範囲(A列)を、第3引数で返したい列(B列)を指定しているからです。VLOOKUPのような「何列目を返すか」の列番号はいりません。
(E)具体例: 単価を取りたい場合は第3引数をC列に変えるだけです。
=XLOOKUP(E1, A:A, C:C)

(P)まとめ: VLOOKUPと違い、列番号を数える必要がありません。列が増減しても数式を修正しなくていいので、実務でとても楽になります。
横方向の検索(月別売上から取得)
XLOOKUPは横方向のデータにも対応しています。HLOOKUPを使っていた場面をXLOOKUP1本で代替できます。
| A列 | B列 | C列 | D列 | |
|---|---|---|---|---|
| 1行目(月) | 1月 | 2月 | 3月 | 4月 |
| 2行目(売上) | 120 | 95 | 180 | 210 |
「3月」の売上を取得するには次のように書きます。
=XLOOKUP("3月", A1:D1, A2:D2)
縦でも横でも同じ書き方で使えるのがXLOOKUPの強みです。HLOOKUPを覚え直す必要もありません。
実践的な使い方・応用例
逆方向(右から左)の検索
VLOOKUPで困る場面の代表例が「検索キーより左の列のデータを取りたい」ケースです。VLOOKUPは検索列の右側しか取れませんが、XLOOKUPはどの方向でも取得できます。
Before(VLOOKUPの場合):
左側の列を取得するには列を並べ替えるか、INDEX+MATCH関数を組み合わせる必要があり、式が複雑になりがちです。
=INDEX(A:A, MATCH(E1, B:B, 0))
After(XLOOKUPの場合):
検索範囲と結果の範囲を自由に指定できるので、シンプルに書けます。
たとえば「商品名(B列)」で検索して「商品コード(A列)」を返す場合:
=XLOOKUP(E1, B:B, A:A)
ちょっとむずかしく見えますが、やっていることはシンプルです。「B列で探して、A列の値を返す」というだけです。

複数列をまとめて返す(スピル)
XLOOKUPは第3引数の結果の範囲に複数列を指定すると、まとめて返してくれます。
商品コードで検索して「商品名」と「単価」を同時に取得する例:
=XLOOKUP(E1, A:A, B:C)
これを入力すると、F1セルに商品名、G1セルに単価が自動で展開されます。これがスピル機能です。VLOOKUPでは列ごとに数式を書く必要があったので、大幅に手間が減ります。

補足
スピル先のセル(F1の場合はG1)に既にデータがあると
#REF!エラーになります。隣のセルを空けておくのを忘れないようにしましょう。
見つからない場合にデフォルト値を返す
VLOOKUPでは一致しないと #N/A エラーが出るため、別途 IFERROR でエラー処理する必要がありました。
Before(VLOOKUPの場合):
=IFERROR(VLOOKUP(E1, A:C, 2, FALSE), "該当なし")
After(XLOOKUPの場合):
第4引数に表示したい文字を指定するだけです。
=XLOOKUP(E1, A:A, B:B, "該当なし")
IFERRORを外付けしなくてよいので、式がスッキリします。空白にしたい場合は "" を指定してください。

=XLOOKUP(E1, A:A, B:B, "")
部分一致(ワイルドカード)検索
第5引数の一致モードを 2 にすると、ワイルドカードが使えます。「株式会社」を含む取引先を検索する、といった柔軟な検索ができます。
=XLOOKUP("*株式会社*", A:A, B:B, "該当なし", 2)
使えるワイルドカードは次の3つです。
| 記号 | 意味 |
|---|---|
* | 任意の文字列(0文字以上) |
? | 任意の1文字 |
~ | ワイルドカード自体を文字として扱う(~ で を検索) |
部分一致はFILTER関数でも可能ですが、XLOOKUPなら1件だけ引き当てたいときにシンプルに書けます。
末尾からの検索(最新データを取得)
第6引数の検索モードを -1 にすると、範囲の末尾から検索します。履歴テーブルから最新の記録を取得するときに便利です。
たとえば、日付順に並んだ訪問履歴から、顧客ごとの最新訪問日を取る場合:
=XLOOKUP(E1, A:A, B:B, "記録なし", 0, -1)
A列が顧客ID、B列が訪問日のとき、末尾から検索することで最新の日付が返ります。VLOOKUPでは実現が難しかった使い方です。
よくあるエラーと対処法
#N/Aエラー(検索キーが見つからない)
(P)結論: #N/A エラーが出る主な原因は「検索キーが検索範囲に存在しない」か「データの型が違う」ことです。
(R)理由: XLOOKUPはデフォルトで完全一致(一致モード=0)を使うため、値が完全に一致しないと見つからないと判断します。
(E)よくあるミス:
- 検索キーが数値なのに検索範囲のデータが文字列になっている(または逆)
- セルに余分なスペースが入っている
- 日付の表示形式がシリアル値のまま
(P)解決策:
| 原因 | 対処方法 |
|---|---|
| 型の不一致(数値 vs 文字列) | TEXT 関数で文字列化 / VALUE 関数で数値化 |
| 余分なスペース | TRIM 関数で前後の空白を除去 |
| 表記ゆれ(大文字小文字・全半角) | UPPER / LOWER / ASC / JIS 関数で統一 |
| そもそも存在しない | 第4引数に "該当なし" などを指定 |
=XLOOKUP(TRIM(E1), A:A, B:B, "データなし")
#VALUE!エラー(範囲サイズ不一致)
検索範囲と結果の範囲の行数(または列数)が一致していないと #VALUE! エラーになります。
ダメな例:
=XLOOKUP(E1, A1:A10, B1:B5)
検索範囲が10行、結果の範囲が5行なのでサイズが一致しません。
対処: 両方の範囲の行数(または列数)をそろえましょう。列全体を指定する A:A と B:B のような書き方なら自動的にそろうので安全です。
#REF!エラー(スピル先が埋まっている)
複数列返しのときに、スピルで展開される先のセルに既存データがあると #REF! エラーが出ます。
対処: スピル先のセルを空ける、または結果の範囲を1列だけに絞る。
#NAME?エラー(関数名の誤り)
XLOOKUP と入力しても認識されない場合があります。古いスプレッドシート(2022年9月以前作成)で開いている可能性があります。新しいファイルを作成し直すか、対応シートにコピーしてください。
VLOOKUP・INDEX+MATCHとの違い・使い分け
関数ごとの比較表
| 比較項目 | VLOOKUP | INDEX+MATCH | XLOOKUP |
|---|---|---|---|
| 検索方向 | 左端列のみ | 任意 | 任意 |
| 横方向の検索 | 不可(HLOOKUPが必要) | 可 | 可 |
| エラー処理 | IFERRORが別途必要 | IFERRORが別途必要 | 第4引数で内蔵 |
| 列番号の指定 | 必要(何列目か数える) | 不要 | 不要 |
| 複数列の同時取得 | 不可 | 不可 | 可(スピル) |
| 末尾から検索 | 不可 | 不可 | 可 |
| 対応シート | すべて | すべて | 2022年9月以降 |
どの関数を使うべきか
- 普段使いはXLOOKUP: 2022年9月以降のスプレッドシートなら、今後は迷わずXLOOKUPが第一候補です
- 古いシートやExcel互換重視ならVLOOKUP: 他部署とのファイル共有で古い環境に戻す可能性があるときはVLOOKUPのままが無難
- INDEX+MATCHはもう不要: XLOOKUPが使えるなら役割を完全に引き継げます
普段の作業で「列番号が変わるたびに修正していた」「IFERRORでネストが深くなっていた」と感じている方におすすめです。この機会にXLOOKUPに乗り換えると、作業が一気に楽になります。
まとめ
XLOOKUP関数のポイントをまとめます。
- 基本は3引数:
=XLOOKUP(検索キー, 検索範囲, 結果の範囲)で動く - 左方向にも検索できる: VLOOKUPの列制限がなく、検索範囲と結果の範囲を自由に設定できる
- エラー処理が内蔵: 第4引数で
"該当なし"などを指定すれば#N/Aをそのまま置き換えられる - 縦横両対応: VLOOKUPとHLOOKUPを1つの関数に統合したイメージ
- 複数列まとめ取得: 結果の範囲に複数列を指定してスピルで展開できる
- 末尾から検索も可: 第6引数を
-1にすると最新データの取得がラク
VLOOKUPに慣れている方も、基本の3引数から使い始めれば違和感なく移行できます。まずは手元の作業で1回使ってみてください。慣れてしまえば「もうVLOOKUPには戻れない」と感じるはずです。
検索系の関数を体系的に学びたい方は、VLOOKUP関数、HLOOKUP関数、INDEX関数、MATCH関数の解説もあわせてどうぞ。複数条件の抽出ならFILTER関数も便利です。
