VLOOKUP の不満、XLOOKUP でほぼ解決します

Excel で「別の表からデータを引っ張ってくる」とき、長らく VLOOKUP が定番でした。便利なんですが、地味に困るところもあったんですよね。

  • 検索列が左端にないと使えない
  • 列番号を数えるのが面倒(しかも列を1本追加するとズレて全部やり直し)
  • 見つからないと「#N/A」が表示されて見栄えが悪い

これ、PC ショップ時代に「経理の Excel が壊れた」と持ち込まれた案件のうち体感で半分くらいは、列を増やしたあとに VLOOKUP の 23 になっておらず参照ズレを起こしていたパターンでした。XLOOKUP(エックスルックアップ)なら、上の3つの不満はだいたい解消できます。Microsoft 365 と Excel 2021 以降で使える新しい関数なんです。

XLOOKUP の基本の書き方

まずはいちばんシンプルな書き方から。

=XLOOKUP(検索値, 検索範囲, 戻り範囲)

たとえば、商品コード「A001」の商品名を別シートの商品マスタから取得したい場合はこうです。

=XLOOKUP(A2, 商品マスタ!A:A, 商品マスタ!B:B)

VLOOKUP と並べてみると違いがわかりやすいです。

VLOOKUPXLOOKUP
書き方=VLOOKUP(A2, 商品マスタ!A:C, 2, FALSE)=XLOOKUP(A2, 商品マスタ!A:A, 商品マスタ!B:B)
列番号必要(2列目=2)不要(範囲で直接指定)
検索列の位置左端のみどこでもOK
見つからない場合#N/A エラー代替値を設定できる

XLOOKUP のうれしいポイント3つ

1. 検索列が左にある必要がない

VLOOKUP は検索する列が範囲の一番左にないと使えませんでした。XLOOKUP は検索範囲と戻り範囲を別々に渡す仕様なので、列の物理的な順番を気にする必要がありません。これだけでも、表の作り方の自由度がぜんぜん違ってきます。

2. 見つからないときの代替値を設定できる

#N/A エラーの代わりに「該当なし」と表示したい場合は、第4引数に書くだけです。

=XLOOKUP(A2, 商品マスタ!A:A, 商品マスタ!B:B, "該当なし")

これまでは =IFERROR(VLOOKUP(...), "該当なし") と外側で囲む必要があったんですが、それがいらなくなる。地味ですが、業務の Excel ではこれが効きます(自分も最初これを知らずに、IFERROR を二重に重ねて読みづらい数式を量産していた時期がありました)。

3. 完全一致がデフォルト

VLOOKUP の事故でいちばん多かったのが、第4引数の FALSE を書き忘れて近似値マッチになり、おかしな値を返してくるパターン。XLOOKUP は最初から完全一致がデフォルトなので、引数を省略しても安全側に倒れてくれます。

VLOOKUP からの乗り換え手順

「全部 XLOOKUP に書き換えるぞ」と気合いを入れたくなる気持ちはわかるんですが、いきなり一斉置換はおすすめしません。実機で何度かやってみてわかったんですが、共有ファイルだと相手の Excel バージョンが古くて開けなくなる事故が起きます。

  1. 新しい数式は XLOOKUP で書く。既存の VLOOKUP はとりあえずそのまま
  2. エラーが出ている VLOOKUP 式を見つけたら、そのタイミングで XLOOKUP に置き換える
  3. VLOOKUP を含むファイルを他の人に共有する場合は、相手の Excel バージョンを確認(Excel 2019 以前は XLOOKUP 非対応)

注意: Excel 2019 以前や、Google スプレッドシートの一部古い環境では XLOOKUP が動きません。共有先がこれらに該当する場合は、無理に書き換えず VLOOKUP のまま運用するのが無難です(公式互換性は Microsoft サポートの XLOOKUP 関数ページ に記載があります)。

FAQ

XLOOKUP は Google スプレッドシートでも使える?

はい、Google スプレッドシートでも2023年から対応 しています。書き方は Excel と同じです。

VLOOKUP はもう使わなくていい?

新規の数式は XLOOKUP がおすすめですが、VLOOKUP が廃止されるわけではないので、既存ファイルを無理に書き換える必要はありません。「過去の VLOOKUP は触らない、新規だけ XLOOKUP」が、結局のところいちばん事故が少ないやり方です。

XLOOKUP で複数条件検索はできる?

直接は対応していませんが、検索値と検索範囲を & で結合すれば擬似的に複数条件検索ができます。例: =XLOOKUP(A2&B2, 表!A:A&表!B:B, 表!C:C)

参考文献