スプレッドシートのXLOOKUP関数の使い方|VLOOKUPとの違いも解説

スポンサーリンク

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)」の既定値で十分です。後ろの応用例で、それぞれが役立つ場面を紹介します。

基本的な使い方

縦方向の検索(商品マスタから取得)

まずは一番よく使う「縦方向の検索」から見てみましょう。

たとえば、下のような商品マスタがあるとします。

01 data sample table

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

=XLOOKUP(E1, A:A, B:B)
02 formula xlookup basic

(P)結論: これだけで「みかん」が返ってきます。

(R)理由: 第1引数で検索キー(E1)を、第2引数で検索範囲(A列)を、第3引数で返したい列(B列)を指定しているからです。VLOOKUPのような「何列目を返すか」の列番号はいりません。

(E)具体例: 単価を取りたい場合は第3引数をC列に変えるだけです。

=XLOOKUP(E1, A:A, C:C)
03 result xlookup basic

(P)まとめ: VLOOKUPと違い、列番号を数える必要がありません。列が増減しても数式を修正しなくていいので、実務でとても楽になります。

横方向の検索(月別売上から取得)

XLOOKUPは横方向のデータにも対応しています。HLOOKUPを使っていた場面をXLOOKUP1本で代替できます。

 A列B列C列D列
1行目(月)1月2月3月4月
2行目(売上)12095180210

「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列の値を返す」というだけです。

04 result xlookup reverse

複数列をまとめて返す(スピル)

XLOOKUPは第3引数の結果の範囲に複数列を指定すると、まとめて返してくれます。

商品コードで検索して「商品名」と「単価」を同時に取得する例:

=XLOOKUP(E1, A:A, B:C)

これを入力すると、F1セルに商品名、G1セルに単価が自動で展開されます。これがスピル機能です。VLOOKUPでは列ごとに数式を書く必要があったので、大幅に手間が減ります。

05 result xlookup multi column

補足

スピル先のセル(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を外付けしなくてよいので、式がスッキリします。空白にしたい場合は "" を指定してください。

06 result xlookup not found
=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:AB:B のような書き方なら自動的にそろうので安全です。

#REF!エラー(スピル先が埋まっている)

複数列返しのときに、スピルで展開される先のセルに既存データがあると #REF! エラーが出ます。

対処: スピル先のセルを空ける、または結果の範囲を1列だけに絞る。

#NAME?エラー(関数名の誤り)

XLOOKUP と入力しても認識されない場合があります。古いスプレッドシート(2022年9月以前作成)で開いている可能性があります。新しいファイルを作成し直すか、対応シートにコピーしてください。

VLOOKUP・INDEX+MATCHとの違い・使い分け

関数ごとの比較表

比較項目VLOOKUPINDEX+MATCHXLOOKUP
検索方向左端列のみ任意任意
横方向の検索不可(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関数も便利です。

タイトルとURLをコピーしました