VLOOKUPとXLOOKUPの違い|どっちを使うべきか

執筆者:

カテゴリ:

VLOOKUPとXLOOKUPは、どちらも「表から値を探して取り出す」関数です。やることは同じですが、XLOOKUPはVLOOKUPの弱点をひと通り解消した後継として作られました。

結論から言うと、新しく書くならXLOOKUPです。ただし、VLOOKUPを使うべき場面も残っています。この記事ではその判断基準を整理します。

書き方の比較

同じ処理を両方で書きます。

VLOOKUP

=VLOOKUP("B-201", A2:C100, 2, FALSE)

XLOOKUP

=XLOOKUP("B-201", A2:A100, B2:B100)

VLOOKUPは「範囲の左から2番目」と位置で指定し、XLOOKUPは「A列を探してB列を返す」と範囲で指定します。

7つの違い

観点 VLOOKUP XLOOKUP
左方向の検索 できない できる
列の挿入 壊れる 壊れない
見つからない場合 IFERROR が必要 引数で指定できる
複数列の取得 数式を複数書く 1つで返せる
下から検索 できない できる
処理の重さ 範囲全体を読む 2列だけ読む
古いExcel 動く 動かない

1. 左方向の検索

VLOOKUPは範囲の左端列しか検索できません。 「商品名から商品コードを引く」ことができません。

XLOOKUPは検索範囲と結果範囲が独立しているので、位置関係を問いません。

=XLOOKUP("ハサミ", B2:B100, A2:A100)

VLOOKUPで左方向を検索するには INDEX+MATCH が必要でした。XLOOKUPはそれを1つの関数で置き換えます。

2. 列の挿入で壊れるか

これが実務で最も痛い違いです。

VLOOKUPは「左から3番目」という位置で指定します。表の途中に列を挿入すると、数式が別の列を指してしまいます。エラーにならず、間違った値を返すのが厄介です。

XLOOKUPは範囲そのものを指定するので、列を挿入しても範囲が自動で追従します。

運用中に静かに壊れないという点だけでも、XLOOKUPを選ぶ理由になります。

3. 見つからないときの扱い

VLOOKUPは #N/A を返すので、IFERROR で包む必要があります。

=IFERROR(VLOOKUP(E2, A:C, 2, FALSE), "未登録")

XLOOKUPは4つ目の引数で直接指定できます。

=XLOOKUP(E2, A:A, B:B, "未登録")

この差は見た目以上に重要です。 IFERROR は数式全体のエラーを握りつぶすので、範囲指定のミスや #REF! まで「未登録」にしてしまいます。

XLOOKUPの第4引数は「見つからなかった場合」だけを扱うため、本当の不具合はエラーとして表面化します。 詳しくは IFERROR のページで扱っています。

4. 複数の列をまとめて返す

XLOOKUPは結果範囲を複数列にできます。

=XLOOKUP("B-201", A2:A100, B2:D100)

商品名・価格・在庫が横並びで一度に出ます。VLOOKUPだと3つの数式が必要でした。

5. 下から検索する

同じキーが複数あるとき、VLOOKUPは常に最初の1件を返します。

XLOOKUPは6つ目の引数に -1 を指定すると、最後の1件を返します。

=XLOOKUP(E2, A:A, B:B, "", 0, -1)

追記型の履歴表から最新の状態を取り出すという、実務で頻出の処理が1行で書けます。

6. 処理の重さ

VLOOKUPは指定した範囲全体を読みます。A:Z を指定すれば26列すべてです。

XLOOKUPは検索列と結果列の2列しか読みません。行数が数万規模になると体感で差が出ます。

7. 古いExcelとの互換性

ここだけがVLOOKUPの優位点です。

XLOOKUPは Microsoft 365 と Excel 2021 以降でしか動きません。Excel 2019以前で開くと #NAME? になります。

スプレッドシートでは両方とも問題なく使えます。

どちらを使うべきか

状況 選ぶ関数
スプレッドシートで新規に書く XLOOKUP
Excel 365 / 2021以降で新規 XLOOKUP
Excel 2019以前と共有する VLOOKUP
取引先にxlsxで渡す(環境不明) VLOOKUP
既存の数式を保守する 触らずVLOOKUPのまま
大量データ(数万行以上) XLOOKUP

判断基準は互換性の一点です。相手の環境が分からないファイルを配るならVLOOKUP、それ以外はXLOOKUPと考えて構いません。

VLOOKUPを使い続けるなら

互換性のためにVLOOKUPを使う場合、列番号を MATCH で動的にすると、列の挿入で壊れなくなります。

=VLOOKUP($E2, $A:$D, MATCH(F$1, $A$1:$D$1, 0), FALSE)

見出し行から列位置を計算しているので、列順が変わっても追従します。VLOOKUPの最大の弱点を、互換性を保ったまま潰せます。

また、4つ目の引数 FALSE は必ず書いてください。 省略すると近似一致になり、存在しない値でもエラーにならず、間違った値が返ります。詳しくは VLOOKUP のページで扱っています。

移行するときの注意

既存のVLOOKUPをXLOOKUPに置き換えるとき、引数の意味が変わる点に注意してください。

VLOOKUP(キー, 範囲全体, 列番号, FALSE)
XLOOKUP(キー, 検索列だけ, 結果列だけ)

VLOOKUPの「範囲全体」をそのままXLOOKUPの第2引数に入れると動きません。検索する列だけを指定してください。

まとめ

  • 新規に書くならXLOOKUP。列の挿入で壊れないのが最大の理由
  • – 左方向の検索・複数列の取得・下から検索ができる
  • VLOOKUPを選ぶ理由は互換性だけ(Excel 2019以前)
  • – VLOOKUPを使うなら、列番号を MATCH で動的にする
  • – VLOOKUPの4つ目の引数 FALSE は必ず書く

関連ページ

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です