本文へスキップ
スキルアップカレッジ

検索の関数——VLOOKUP・XLOOKUP・INDEX/MATCH の使い分け

レッスン3:検索の関数——VLOOKUPXLOOKUPINDEX/MATCH の使い分け

このレッスンで学ぶこと

  • VLOOKUP の基本構造と限界を理解する
  • XLOOKUP の登場と利点を整理できる
  • INDEX/MATCH の発想と柔軟性を把握する
  • 3 つの関数の使い分け基準を持つ
  • 近似一致完全一致の違いを理解する
  • 検索のエラー対処を整理する
  • 2026 年 6 月時点の業務現場の現実を踏まえる

前のレッスンでは、関数の基本構造、相対参照絶対参照SUMIFCOUNTIF などの集計関数を扱いました。今回のレッスンでは、Excel で最もよく使われる「検索の関数」を扱います。VLOOKUP、XLOOKUP、INDEX/MATCH——名前は聞いたことがあっても、3 つの違いと使い分けまで整理されている方は多くありません。本レッスンで、判断軸を持ち帰っていただきます。

検索の関数とは何か

検索の関数は、「ある値をキーに、別の表から関連する値を取得する」関数です。

例:

  • 商品コードを入力したら、商品名と価格を自動で表示
  • 社員番号を入力したら、氏名と部署を自動で表示
  • 注文番号を入力したら、配送日と金額を自動で表示

業務でデータを扱うとき、複数の表をき来して情報を組み合わせる場面は必ず出てきます。検索の関数は、そのときの効率を決定的に変えます。

検索の典型的な場面

A 表(商品マスター)
| 商品コード | 商品名 | 価格 |
| A001     | リンゴ | 200 |
| A002     | バナナ | 150 |
| A003     | オレンジ | 250 |

B 表(注文票)
| 注文ID | 商品コード | 数量 |
| 1     | A002     | 5   |
| 2     | A001     | 3   |
| 3     | A003     | 2   |

B 表の「商品コード」を見て、A 表の「商品名」と「価格」を引っ張ってきたい——これが検索の関数の典型的な場面です。

VLOOKUP——伝統の関数

VLOOKUP は、Excel の長期にわたる定番関数です。「V」は Vertical(縦方向)の意味で、縦方向の表から値を検索します。

VLOOKUP の構造

=VLOOKUP(検索値, 検索する範囲, 列番号, 検索方法)
  • 検索値:探したい値(例:商品コード)
  • 検索する範囲:検索対象の表全体
  • 列番号:取得したい列が範囲の何列目か(左端から数える)
  • 検索方法FALSE(完全一致)または TRUE(近似一致)

例:

=VLOOKUP("A002", A2:C4, 2, FALSE)
… A2:C4 の範囲で「A002」を縦方向に検索し、見つかった行の 2 列目(商品名)を返す
… 結果:「バナナ」

VLOOKUP の限界

VLOOKUP は強力ですが、以下の限界があります。

  1. 左方向の検索ができない:検索値より右の列しか取得できない(「商品名から商品コードを取得」ができない)
  2. 列番号が数値:列を挿入すると、列番号がずれて式が壊れる
  3. 完全一致のときは必ず FALSE を付ける:忘れると近似一致になり、意図しない結果になる
  4. 検索値が複数ヒットしても、最初の 1 件しか返さない

⚠️ 注意 VLOOKUP で最も多いミスが「FALSE を忘れて近似一致になる」です。完全一致を期待しているなら、必ず FALSE または 0 を付けましょう。

XLOOKUP——新世代の検索関数

XLOOKUP は、Microsoft 365 で 2019 年にプレビュー、2020 年 1 月に一般提供が始まった新しい関数です。VLOOKUP の限界を解消し、より柔軟に検索できます。

XLOOKUP の構造

=XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない場合], [一致モード], [検索モード])
  • 検索値:探したい値
  • 検索範囲:検索対象の列(1 列を指定)
  • 返す範囲:取得したい列(1 列を指定)
  • 見つからない場合(省略可):見つからないときに返す値
  • 一致モード(省略可):0=完全一致(既定)、-1=完全一致または小さい近似、1=完全一致または大きい近似、2=ワイルドカード一致
  • 検索モード(省略可):1=先頭から(既定)、-1=末尾から、など

例:

=XLOOKUP("A002", A2:A4, B2:B4)
… A 列で「A002」を検索し、見つかった行の B 列(商品名)を返す
… 結果:「バナナ」

=XLOOKUP("A099", A2:A4, B2:B4, "未登録")
… A 列で「A099」を検索し、見つからない場合は「未登録」を返す

XLOOKUP の利点

  1. 左方向の検索ができる:検索範囲と返す範囲を独立に指定できる
  2. 列番号ではなく列範囲で指定:列の挿入で壊れにくい
  3. 完全一致がデフォルトFALSE を書き忘れて事故になることがない
  4. 見つからない場合の値を引数で指定できる:IFERROR でラップする必要がない
  5. 動的配列(レッスン 7)と組み合わせやすい

Google スプレッドシートでの利用

Google スプレッドシートも 2022 年に XLOOKUP に対応しました。Excel と同じ書式で使えます。

💡 ポイント 新規に式を書くなら、XLOOKUP のほうが書きやすく、壊れにくいです。一方で、業務現場には VLOOKUP で組まれたシートが大量にあります。両方読める状態を目指すのが現実的です。

INDEX/MATCH——古典的な柔軟解

VLOOKUP の限界を補うために古くから使われてきたのが、INDEX と MATCH の組み合わせです。

INDEX——「範囲の n 行目 m 列目」を取得

=INDEX(範囲, 行番号, 列番号)

例:

=INDEX(A2:C4, 2, 2)
… A2:C4 の範囲の 2 行目 2 列目を取得
… 結果:「バナナ」(B3 セルの値)

MATCH——「ある値が範囲の何行目か」を取得

=MATCH(検索値, 検索範囲, 検索方法)

例:

=MATCH("A002", A2:A4, 0)
… A2:A4 で「A002」を検索し、何番目にあるかを返す
… 結果:2(A2:A4 の中で 2 番目)

検索方法は 0(完全一致)、1(昇順データで以下を返す)、-1(降順データで以上を返す)です。

INDEX/MATCH の組み合わせ

両者を組み合わせると、VLOOKUP より柔軟な検索ができます。

=INDEX(B2:B4, MATCH("A002", A2:A4, 0))
… A2:A4 で「A002」を検索した順位を MATCH で取得し、その順位を INDEX で B 列から取り出す
… 結果:「バナナ」

INDEX/MATCH の利点

  1. 左方向の検索もできる:列の順序に依存しない
  2. 列の挿入で壊れにくい:列番号ではなく範囲で指定
  3. 検索範囲と返す範囲を別々に指定できる
  4. どんな Excel バージョンでも使える(古い Excel でも)

INDEX/MATCH の難点

  • 2 つの関数を組み合わせるため、初見ではわかりにくい
  • 書く文字数が多い
  • XLOOKUP が登場してからは、新規で使う場面が減った

3 つの使い分け

3 つの関数の使い分けを、判断ツリーで整理します。

flowchart TD
  A[検索の関数を使いたい] --> B{Microsoft 365<br/>または<br/>Google スプレッドシート?}
  B -->|Yes| C[XLOOKUP を使う]
  B -->|No| D{左方向の検索や<br/>列の挿入耐性が必要?}
  D -->|Yes| E[INDEX/MATCH を使う]
  D -->|No| F[VLOOKUP を使う]

判断のまとめ

状況 推奨
Microsoft 365 または Google スプレッドシートで新規作成 XLOOKUP
古い Excel(2019 以前)で新規作成 INDEX/MATCH
古い Excel で単純な右方向検索だけ VLOOKUP(容認)
既存シートのメンテナンス(VLOOKUP で書かれている) VLOOKUP を維持(無理に書き換えない)

業務現場の現実

2026 年 6 月時点でも、企業の業務現場では VLOOKUP が圧倒的に多く使われています。理由は、

  • Excel 2019 以前で作られたシートが大量に残っている
  • VLOOKUP で書かれた既存資産を書き換えるリスクとコスト
  • 社員のスキルが VLOOKUP に偏っている
  • マネジメント層が「VLOOKUP は知っているが XLOOKUP は知らない」状態

「新規は XLOOKUP、既存は VLOOKUP のまま」というハイブリッド戦略が、現実的な現場の姿です。

📝 補足 「XLOOKUP に全部書き換えるべき」と決めつけないでください。書き換えにはコストとリスクがあり、既存シートが安定して動いているなら、書き換える優先度は高くありません。

近似一致と完全一致

検索の関数で混乱しやすいのが、「近似一致」と「完全一致」の違いです。

完全一致

検索値と「ぴったり一致するもの」だけを探す方式。VLOOKUP の FALSE、XLOOKUP の一致モード 0、MATCH の検索方法 0 がこれにあたります。

業務で使うのは、ほとんどの場合「完全一致」です。商品コード、社員番号、注文番号など、明確な ID で検索するときは完全一致を選びます。

近似一致

検索値と「ぴったり一致しなくても、近いもの」を返す方式。VLOOKUP の TRUE(既定)、XLOOKUP の一致モード -11 がこれにあたります。

近似一致が役立つのは、「価格帯から割引率を出す」「点数から成績ランクを出す」のような、段階表(しきい値表)を引くときです。

例:

段階表(昇順)
| 点数下限 | ランク |
| 0     | E     |
| 60    | D     |
| 70    | C     |
| 80    | B     |
| 90    | A     |

=VLOOKUP(75, 段階表, 2, TRUE)
… 75 点に対する近似一致で「C」を返す

「近似一致のときは検索範囲を昇順に並べる」必須ルール

近似一致を使うときは、検索範囲が昇順で並んでいる必要があります。並んでいないと、間違った結果を返します。

「完全一致を使うのを忘れて、近似一致で偶然それらしい結果が返ってきたが実は間違い」という事故は、業務で繰り返し起きています。

⚠️ 注意 完全一致と近似一致の取り違えは、検索関数で最も恐ろしいバグの原因です。業務では、特に理由がない限り完全一致(FALSE / 0)を選びます。

検索のエラー対処

検索でよく出るエラーと対処を整理します。

#N/A が出る場合

「検索値が範囲にない」が最大の原因です。以下を確認しましょう。

  1. 表記揺れ:「東京都」と「東京」、半角と全角、前後の空白
  2. データ型の違い:数値の 1 と文字の "1" は別物
  3. 完全一致と近似一致の取り違え:意図と違うモードになっていないか
  4. 検索範囲の指定ミス:範囲が想定と違う

IFERROR でわかりやすい表示にする

エラーが出る可能性のある式は、IFERROR で包むと業務的に親切です。

=IFERROR(VLOOKUP(A2, データ範囲, 2, FALSE), "未登録")
… 見つからない場合は「未登録」と表示

=XLOOKUP(A2, 検索範囲, 返す範囲, "未登録")
… XLOOKUP は引数 4 で同じことができる

#REF! が出る場合

参照しているセルや列が削除されたときに出ます。VLOOKUP で「列番号を数値指定」していて、列を挿入・削除したときに発生しやすい代表例です。

講師の現場メモ:「VLOOKUP の FALSE 忘れで 1 億円違いの納品ミス」

私(水田)が大手コンサルファームで支援していた中堅小売業の話です。発注担当者から「VLOOKUP で組んだ発注シートで、商品コードを入れると間違った価格が出る」と緊急相談を受けました。

シートを見ると、発注金額の総額が想定の 4 倍。1 億円を超えていました。

原因は、VLOOKUP の 4 つ目の引数(検索方法)が FALSE ではなく空欄になっていたことです。

=VLOOKUP(B2, 商品マスター, 3)
       ↑ 4 つ目の引数がない → 既定値は TRUE(近似一致)

商品コードが商品マスターになかった場合、近似一致で「いちばん近い別の商品の価格」を返していました。発注総額が想定より大きく膨らんでいたのに、誰も検算していませんでした。

私は緊急対応で、

  1. すべての VLOOKUP に FALSE を追加
  2. IFERROR でラップして見つからない場合は「未登録」と表示
  3. 発注総額の妥当性チェック式(前月比較)を追加
  4. 検算ルール(金額が前月の 2 倍を超えたら警告)を整備

を行いました。発注前に気づけて納品事故は回避できましたが、もし気づかず発注していたら、過剰在庫で数千万円規模の被害になっていたはずです。

このときに痛感したのは、VLOOKUP の「FALSE を書く習慣」は、ただのスキルではなく業務リスク対策だ、ということです。1 文字書き忘れるだけで、業務全体が傾く事故が起きます。本コースで XLOOKUP を推奨するのも、FALSE を書かなくて済む(完全一致がデフォルト)のが業務リスクを大きく下げるからです。

新しい関数を使うときに「便利だから」だけでなく、「事故を減らすから」という観点を持つと、関数選定の判断軸が広がります。

まとめ

このレッスンでは、以下のことを学びました。

  • 検索の関数は「ある値をキーに、別の表から関連する値を取得する」関数。業務で複数の表を行き来する効率を決める
  • VLOOKUP:=VLOOKUP(検索値, 範囲, 列番号, 検索方法)。長期の定番だが左方向検索不可、列番号ずれに弱い、FALSE を忘れる事故が多い
  • XLOOKUP:=XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない場合], ...)。Microsoft 365 で 2019 年プレビュー・2020 年一般提供、Google スプレッドシートで 2022 年対応。左方向検索可、列の挿入に強い、完全一致がデフォルト
  • INDEX/MATCH:古い Excel でも使える柔軟な組み合わせ。読みにくい難点
  • 使い分け:Microsoft 365/Google なら XLOOKUP、古い Excel で柔軟性が要るなら INDEX/MATCH、単純な右方向検索なら VLOOKUP(容認)、既存メンテは現状維持
  • 近似一致と完全一致の違いを理解する。業務はほとんど完全一致
  • 近似一致を使うときは検索範囲を昇順に並べる必須ルール
  • #N/A の主な原因:表記揺れ、データ型違い、完全一致と近似一致の取り違え、範囲指定ミス
  • IFERROR と XLOOKUP の 4 番目の引数で、見つからない場合の表示を制御できる

次のレッスンでは、データ整形の関数(TEXTTRIM・LEFT/RIGHT/MID・文字列結合・SUBSTITUTE)を扱います。


確認クイズ

このレッスンの理解度をチェックしましょう。