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

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

(P)結論: これだけで「みかん」が返ってきます。
(R)理由: 第1引数で検索キー(E1)を、第2引数で検索範囲(A列)を、第3引数で返したい列(B列)を指定しているからです。
(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月", 1:1, 2:2)
縦でも横でも同じ書き方で使えるのがXLOOKUPの強みです。
実践的な使い方・応用例
逆方向(右から左)の検索
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では列ごとに数式を書く必要があったので、大幅に手間が減ります。

見つからない場合にデフォルト値を返す
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, "")
よくあるエラーと対処法
#N/Aエラーの原因と解決策
(P)結論: #N/A エラーが出る主な原因は「検索キーが検索範囲に存在しない」か「データの型が違う」ことです。
(R)理由: XLOOKUPはデフォルトで完全一致(一致モード=0)を使うため、値が完全に一致しないと見つからないと判断します。
(E)よくあるミス:
- 検索キーが数値なのに検索範囲のデータが文字列になっている(または逆)
- セルに余分なスペースが入っている
- 日付の表示形式がシリアル値のまま
(P)解決策:
型の不一致が疑われる場合は、TEXT 関数や VALUE 関数で型を揃えましょう。また、第4引数に "該当なし" や "" を設定しておくと、エラーの代わりにわかりやすい表示に変えられます。
=XLOOKUP(E1, A:A, B:B, "データなし")
補足
一致モードを
2(ワイルドカード)にすると、部分一致検索ができます。たとえば"りんご"で「りんご」を含む行を検索できます。
VLOOKUPとの違い・使い分け
| 比較項目 | VLOOKUP | XLOOKUP |
|---|---|---|
| 検索方向 | 左端列のみ | 任意の列・行 |
| 横方向の検索 | 不可(HLOOKUPが必要) | 可 |
| エラー処理 | IFERRORが別途必要 | 第4引数で内蔵 |
| 列番号の指定 | 必要(何列目か数える) | 不要(範囲で指定) |
| 複数列の同時取得 | 不可 | 可(スピル) |
| 対応バージョン | すべてのバージョン | 2022年9月以降のスプレッドシート |
どちらを使うべきか?
Googleスプレッドシートを普段使いしているなら、今後は迷わずXLOOKUPを選びましょう。VLOOKUPで書けることはすべてXLOOKUPで書けますし、できないことも多く解消されます。
ただし、シートを他のメンバーと共有していて「古いスプレッドシートや古いExcelで開く可能性がある」場合は、互換性の観点からVLOOKUPのままにしておく判断もありです。
まとめ
XLOOKUP関数のポイントをまとめます。
- 基本は3引数:
=XLOOKUP(検索キー, 検索範囲, 結果の範囲)で動く - 左方向にも検索できる: VLOOKUPの列制限がなく、検索範囲と結果の範囲を自由に設定できる
- エラー処理が内蔵: 第4引数で
"該当なし"などを指定すれば#N/Aをそのまま置き換えられる - 縦横両対応: VLOOKUPとHLOOKUPを1つの関数に統合したイメージ
- 複数列まとめ取得: 結果の範囲に複数列を指定してスピルで展開できる
VLOOKUPに慣れている方も、基本の3引数から使い始めれば違和感なく移行できます。まず手元の作業で1回使ってみてください。慣れてしまえば「もうVLOOKUPには戻れない」と感じるはずです。
スプレッドシートで他にも便利な検索系の関数を知りたい方は、MATCH関数やINDEX関数の解説もあわせてどうぞ。
