「VLOOKUPとXLOOKUPって何が違うの?」と迷ったことはありませんか。「INDEX+MATCHのほうがいい」なんて声も聞きますよね。
Excelの検索関数は選択肢が多いぶん、どれを覚えるべきか迷いますよね。間違った関数を選ぶと、あとから数式を全部書き直すハメになることも。
この記事では、3つの検索関数の違いを4つの比較軸で整理します。記事の最後には「あなたが今日から使うべき関数」がわかる選び方フローも用意しました。
この記事は次のような人におすすめ
– VLOOKUPしか使ったことがない人
– XLOOKUPに乗り換えるべきか迷っている人
– INDEX+MATCHの実力を知りたい人
VLOOKUP・XLOOKUP・INDEX/MATCHの違い【結論から】
最初に結論をお伝えします。3つの関数の使い分けは次のとおりです。
- Microsoft 365 または Excel 2021 を使っている → XLOOKUPが最適
- Excel 2019以前、または古いバージョンとファイルを共有する → INDEX+MATCH が安心
- シンプルな右方向の検索だけ → VLOOKUPでも十分
3関数の機能比較表
| 比較項目 | VLOOKUP | XLOOKUP | INDEX+MATCH |
|---|---|---|---|
| 対応バージョン | 全バージョン | Excel 2021 / 365 | 全バージョン |
| 検索方向 | 右方向のみ | 左右どちらも | 左右どちらも |
| エラー処理 | IFERRORが必要 | 第4引数で指定可 | IFERRORが必要 |
| 列挿入への耐性 | 弱い(列番号ずれ) | 強い | 強い |
| 構文の長さ | 短い(4引数) | 短い(実質3引数) | 長い(2関数ネスト) |
| 学習コスト | 低い | 低い | やや高い |
今日から使うべき検索関数がわかる選び方フロー
自分の環境に合った関数を判定してみてください。
ステップ1: Excelのバージョンを確認
お使いのExcelはMicrosoft 365またはExcel 2021ですか?
- はい → ステップ2へ
- いいえ(Excel 2019以前) → ステップ3へ
- わからない → 「ファイル」→「アカウント」で確認できます
ステップ2: ファイルを共有する相手のバージョン
古いバージョンのExcelを使う人とファイルを共有しますか?
- 共有しない、または相手もMicrosoft 365 → XLOOKUPを使いましょう
- 共有する(相手がExcel 2019以前) → ステップ3へ
ステップ3: 検索方向の確認
検索値より左側の列から値を取得する必要がありますか?
- はい(左方向の検索が必要) → INDEX+MATCHを使いましょう
- いいえ(右方向だけでOK) → VLOOKUPでも対応できます
NOTE
「今からExcelを本気で学ぶなら、まずどれ?」と聞かれたら、答えはXLOOKUPです。Microsoft 365の普及率は年々上がっています。ただし社内の環境がExcel 2019以前の場合は、INDEX+MATCHを覚えておくと安心です。
VLOOKUP関数の特徴とメリット・デメリット
VLOOKUPの基本構文
=VLOOKUP(検索値, 範囲, 列番号, [検索の型])
たとえば、社員番号「A003」の名前を取得したい場合です。
=VLOOKUP("A003", A1:C10, 3, FALSE)
A1:C10の範囲でA列から「A003」を探します。見つかったら同じ行の3列目の値を返します。
VLOOKUPのメリット
- 知名度が圧倒的: Excel入門書やネット記事で最も情報が多い
- 全バージョンで動く: Excel 2007以降ならどの環境でも使える
- 構文がシンプル: 引数4つで覚えやすい
VLOOKUPのデメリット
VLOOKUPには2つの弱点があります。
1. 左方向に検索できない
VLOOKUPは範囲の一番左の列で検索します。検索列より左の値は取得できません。
たとえばB列の商品コードで検索してA列の商品名を取得する、ということができません。この場合は列の並びを変えるか、別の関数を使う必要があります。
2. 列番号がハードコードでずれやすい
第3引数の列番号は「何列目を返すか」を数値で指定します。あとから列を挿入すると番号がずれてしまいます。
数式を100個コピーしたあとに列を追加すると、100個すべて修正が必要です。大きな表ほどリスクが高くなります。
詳しくは「VLOOKUP関数の使い方」をご覧ください。
XLOOKUP関数の特徴とメリット・デメリット
XLOOKUPの基本構文
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
同じく社員番号「A003」の名前を取得する場合です。
=XLOOKUP("A003", A1:A10, C1:C10)
VLOOKUPとの違いが一目でわかりますよね。列番号ではなく「どの列を返すか」を直接指定しています。
XLOOKUPのメリット
- 左方向の検索ができる: 検索範囲と戻り範囲を自由に指定可
- エラー処理が組み込み: 第4引数に「見つからないときの値」を直接指定可
- 列番号がないのでずれない: 列の挿入・削除に強い
XLOOKUPでエラー処理を組み込む例です。
=XLOOKUP("A003", A1:A10, C1:C10, "該当なし")
見つからない場合は「該当なし」と表示されます。VLOOKUPのようにIFERROR関数で囲む必要がありません。
XLOOKUPのデメリット
1. 対応バージョンが限られる
XLOOKUPはExcel 2021およびMicrosoft 365専用です。Excel 2019以前では #NAME? エラーになります。
NOTE
社内でExcelのバージョンが混在している場合は要注意です。XLOOKUPで作ったファイルを古いバージョンで開くと、数式がすべてエラーになります。
2. ネット上の情報がまだ少ない
VLOOKUPと比べると解説記事や質問サイトの情報量が少なめです。困ったときに検索で解決しにくい場面があります。
詳しくは「XLOOKUP関数の使い方」をご覧ください。
INDEX/MATCH関数の特徴とメリット・デメリット
INDEX/MATCHの基本構文
INDEX関数とMATCH関数を組み合わせて使います。
=INDEX(戻り範囲, MATCH(検索値, 検索範囲, 0))
社員番号「A003」の名前を取得する場合です。
=INDEX(C1:C10, MATCH("A003", A1:A10, 0))
MATCH関数がA列から「A003」の行位置を取得します。INDEX関数がC列の同じ行の値を返します。
INDEX/MATCHのメリット
- 全バージョン対応: Excel 2007以降ならどこでも動く
- 左方向の検索ができる: 検索範囲と戻り範囲が独立
- 列の挿入・削除に強い: 列番号を使わないのでずれない
- 処理速度が速い: 大量データではVLOOKUPより高速
INDEX/MATCHのデメリット
1. 数式が長くなる
2つの関数をネストするので、数式が長くなります。慣れるまでは書き方に戸惑うかもしれません。
2. 学習コストがやや高い
INDEX関数とMATCH関数の2つを理解する必要があります。VLOOKUPやXLOOKUPが1つの関数で完結するのに対し、少しハードルが上がります。
それぞれの詳しい使い方は以下の記事で解説しています。
4つの比較軸で徹底比較
ここからは、3つの関数を4つの軸で詳しく比較していきます。
比較1: バージョン互換性
| 関数 | Excel 2016 | Excel 2019 | Excel 2021 | Microsoft 365 |
|---|---|---|---|---|
| VLOOKUP | 使える | 使える | 使える | 使える |
| XLOOKUP | 使えない | 使えない | 使える | 使える |
| INDEX+MATCH | 使える | 使える | 使える | 使える |
XLOOKUPだけがExcel 2021以降に限定されています。社内でバージョンが統一されていない場合は、VLOOKUPかINDEX+MATCHを選んでください。
比較2: 検索方向(左方向検索への対応)
VLOOKUPは範囲の最左列で検索し、右方向にしか値を返せません。
たとえば次のような表があるとします。
| A列(商品名) | B列(商品コード) | C列(価格) |
|---|---|---|
| りんご | F001 | 150 |
| バナナ | F002 | 100 |
「商品コード F001 の商品名を知りたい」場合です。VLOOKUPではB列で検索してA列(左側)を返せません。
- VLOOKUP: 不可(補助列の追加が必要)
- XLOOKUP:
=XLOOKUP("F001", B:B, A:A)で簡単にできる - INDEX+MATCH:
=INDEX(A:A, MATCH("F001", B:B, 0))でできる
比較3: エラー処理の手間
検索値が見つからない場合の動作を比較します。
VLOOKUPの場合(IFERROR関数が必要)
=IFERROR(VLOOKUP("A999", A1:C10, 3, FALSE), "該当なし")
XLOOKUPの場合(第4引数で指定)
=XLOOKUP("A999", A1:A10, C1:C10, "該当なし")
INDEX+MATCHの場合(IFERROR関数が必要)
=IFERROR(INDEX(C1:C10, MATCH("A999", A1:A10, 0)), "該当なし")
XLOOKUPが最もシンプルです。エラー処理を関数内で完結できるのは大きなメリットです。
比較4: 処理速度(大量データ時の違い)
数万行を超えるデータで検索する場合、処理速度に差が出ます。
| 関数 | 速度の傾向 | 理由 |
|---|---|---|
| VLOOKUP | やや遅い | 範囲全体を保持するためメモリ効率が低い |
| XLOOKUP | 速い | 検索範囲と戻り範囲が分離しており効率的 |
| INDEX+MATCH | 速い | MATCHが行位置だけを返すため軽量 |
体感できるほどの差が出るのは、数万行以上の表で大量に数式を使う場合です。数百行程度なら速度差はほぼ気になりません。
よくある失敗パターンと対処法
3つの関数で起きやすいトラブルをまとめました。
パターン1: #N/Aエラーが出る
3つの関数に共通する、最も多いエラーです。
| 原因 | 対処法 | |
|---|---|---|
| 検索値のスペルミス | 検索値と表の値を目視で確認する | |
| 余分なスペースが入っている | [[2022-08-03-excel-function-howto-use-trim | TRIM関数]]で空白を除去する |
| 全角・半角の不一致 | ASC関数で半角に統一する | |
| 検索の型がTRUE(近似一致) | FALSEまたは0を指定して完全一致にする |
エラー処理にはIFERROR関数が便利です。#N/Aだけ処理したい場合はIFNA関数もおすすめです。
パターン2: VLOOKUPの列番号ずれを防ぐ方法
VLOOKUPの第3引数に数値を直接書くと、列の追加でずれます。MATCH関数を使って列番号を自動取得する方法があります。
=VLOOKUP("A003", A1:E10, MATCH("価格", A1:E1, 0), FALSE)
ヘッダー行から「価格」列の位置を自動で取得しています。列を挿入しても数式がずれません。
ただしここまでするなら、INDEX+MATCHに切り替えるほうが合理的です。
パターン3: XLOOKUPが使えないときの代替策
Excel 2019以前で #NAME? エラーが出る場合です。XLOOKUPの代わりにINDEX+MATCHを使いましょう。
XLOOKUP → INDEX+MATCHの書き換え例です。
=XLOOKUP("A003", A1:A10, C1:C10, "該当なし")
上の数式はINDEX+MATCHで書くとこうなります。
=IFERROR(INDEX(C1:C10, MATCH("A003", A1:A10, 0)), "該当なし")
機能は同じです。XLOOKUPのほうが短いですが、INDEX+MATCHなら全バージョンで動きます。
まとめ
VLOOKUP・XLOOKUP・INDEX/MATCHの違いを振り返ります。
| 選ぶ基準 | おすすめの関数 |
|---|---|
| Excel 2021 / 365 でシンプルに使いたい | XLOOKUP |
| 全バージョン対応 + 左方向検索が必要 | INDEX+MATCH |
| シンプルな右方向検索だけ | VLOOKUP |
迷ったらまずXLOOKUPを試してみてください。もしバージョンの制約がある場合は、INDEX+MATCHを覚えておけば困ることはありません。VLOOKUPは既存の数式を読み解くためにも知っておくと安心です。
3つとも「表からデータを探す」という目的は同じです。環境と用途に合った関数を選んでいきましょう。
