VLOOKUP 完全ガイド
VLOOKUPとは何か、なぜ重要なのか
VLOOKUP(Vertical Lookup)は、テーブルの最初の列で値を検索し、別の列から対応する値を返します。Excel組み込みの検索エンジンと考えてください。製品IDを入力すれば、瞬時に価格、カテゴリ、在庫レベルを取得できます。レポート作成、照合作業、データ統合を行う場合、VLOOKUPは毎週何時間もの時間を節約します。
構文: =VLOOKUP(検索値, 範囲, 列番号, [検索方法])
- 検索値 — 検索する値が入ったセル(例:A2の製品ID)
- 範囲 — 検索列と結果列の両方を含むデータ範囲全体
- 列番号 — 結果が含まれる列番号(範囲の左端から数えて)
- 検索方法 — FALSEで完全一致(95%の場合これを使用)、TRUEで近似一致
ステップバイステップ:初めてのVLOOKUP
実際のシナリオを見ていきます。列B〜Eに製品カタログがあり、列Aに検索する製品IDリストがあります。カタログから価格を列Fに抽出します。
ステップ1 — データを準備する
ワークブックを開き、データレイアウトを確認します:
- 製品カタログシートに移動します。列Bに製品ID、列Dに価格があることを確認します。
- カタログ範囲内に完全に空の行が存在しないことを確認します。Excelは空行をデータの終わりとみなすため、VLOOKUPがそれ以降の行を見落とす原因になります。
- カタログ範囲(B2:E500)を選択し、Ctrl+Tを押してExcelテーブルに変換します。テーブルデザインタブから
Catalogと名前を付けます。テーブルは自動拡張され、構造化参照が使えます。
ステップ2 — 最初の結果セルに数式を書く
- セルF2(検索結果の最初の行)をクリックします。
=VLOOKUP(と入力します — Excelが4つの引数のヒントを表示します。入力中に参照として使用してください。- 検索値としてセルA2をクリックします。Excelが
A2を数式に挿入します。 - カンマを入力し、カタログ範囲全体 B2:E500をマウスで選択します。すぐにF4を押して参照をロックします —
$B$2:$E$500と表示されるはずです。この絶対参照により、数式を下にコピーしても範囲がずれません。 - カンマを入力し、列番号として 3 を入力します。なぜ3か? 価格はB2:E500の左端から数えて3列目だからです:B=1, C=2, D=3。
- カンマを入力し、完全一致として FALSE を入力します。
- 括弧を閉じてEnterを押します。
完成した数式は次のようになります: =VLOOKUP(A2, $B$2:$E$500, 3, FALSE)
ステップ3 — 数式を下方向にコピーする
- セルF2をクリックして選択します。選択範囲の右下隅に小さな緑の四角(フィルハンドル)が表示されます。
- フィルハンドルをダブルクリックします。Excelが列Aのデータに合わせて自動的に数式を下方向にコピーします。
- または、F2を選択し、Ctrl+Shift+下矢印で最終行まで選択を拡張し、Ctrl+D(下方向にコピー)を押します。
- いくつかの行を確認します:F5をクリックして数式バーを見ます。
=VLOOKUP(A5, $B$2:$E$500, 3, FALSE)と表示されるはずです — A5が変わり(相対参照)、$B$2:$E$500が変わらない(絶対参照)ことに注意してください。
ステップ4 — IFERRORで欠損値を処理する
#N/Aエラーはレポートを壊れたように見せます。代わりにわかりやすいメッセージを表示するよう数式をラップしましょう:
- セルF2をダブルクリックして数式を編集します。
=VLOOKUPの直前に=IFERROR(と入力します。- 数式の末尾(VLOOKUPの閉じ括弧の後)に移動し、カンマを入力してから
"カタログにありません")と入力します。 - Enterを押します。数式は次のようになります:
=IFERROR(VLOOKUP(A2, $B$2:$E$500, 3, FALSE), "カタログにありません") - F2のフィルハンドルを再度ダブルクリックして、改善された数式を下にコピーします。
- 行4には、醜い#N/Aの代わりに「カタログにありません」と表示されます。
主要テクニックとベストプラクティス
テクニック1 — 名前付き範囲で自己文書化された数式を作る
$B$2:$E$500 のような不可解なセル参照を含む数式は、後から理解するのが困難です。名前付き範囲でこれを解決します:
- 範囲B2:E500を選択します。名前ボックス(通常セルアドレスが表示される数式バーの左側のフィールド)をクリックします。
CatalogTableと入力してEnterを押します。範囲に名前が付きました。- VLOOKUPを次のように書き直します:
=IFERROR(VLOOKUP(A2, CatalogTable, 3, FALSE), "見つかりません") - この数式を読む人は誰でも、CatalogTableが検索元だとすぐにわかります — セル参照を追跡する必要はありません。
テクニック2 — MATCHによる動的な列番号
列番号として 3 をハードコードすると、列を挿入・削除したときに壊れます。代わりにMATCHに正しい列番号を自動検出させましょう:
- 行1(B1:E1)にヘッダーがあると仮定します:「製品ID」「製品名」「価格」「カテゴリ」。
- ハードコードされた
3を次のように置き換えます:MATCH("価格", $B$1:$E$1, 0) - 完全な数式:
=IFERROR(VLOOKUP(A2, CatalogTable, MATCH("価格", $B$1:$E$1, 0), FALSE), "見つかりません") - これで、誰かがCとDの間に「サプライヤー」列を挿入しても、価格は列3から列4に移動しますが — MATCHが自動的に見つけるため、数式は引き続き機能します。
テクニック3 — VLOOKUP + COLUMN トリックで複数列を返す
各検索IDに対して製品名、価格、カテゴリのすべてを抽出する必要がある場合:
- F2(名前):
=IFERROR(VLOOKUP($A2, CatalogTable, 2, FALSE), "") - G2(価格):
=IFERROR(VLOOKUP($A2, CatalogTable, 3, FALSE), "") - H2(カテゴリ):
=IFERROR(VLOOKUP($A2, CatalogTable, 4, FALSE), "") $A2に注目 — ドル記号は列参照をAに固定しますが、行(2)は下方向コピー時に調整されます。これで3つの数式すべてを一気に右と下にコピーできます。
よくある間違い(と即座に修正する方法)
- 間違い: データが明らかに存在するのにVLOOKUPが#N/Aを返す。
修正: 検索値とテーブルの最初の列のデータ型が異なります。"00123"(文字列)≠ 123(数値)。検索列を選択し、データ > 区切り位置 > 完了で文字列数値を実際の数値に変換します。または、検索値をTEXT(A2, "00000")でラップします。 - 間違い: 行2では動作するが、行3にコピーすると壊れる。
修正: 範囲を$記号でロックし忘れています。F2を編集し、数式内のB2:E500を選択してF4を押します。$B$2:$E$500になるはずです。 - 間違い: VLOOKUPが誤った値を返す — ほぼ正しいが微妙にずれている。
修正: 第4引数を省略しています。FALSEがないと、VLOOKUPはデフォルトで近似一致を使用します。ソート済みリスト内で最も近い値を探すため、求める完全一致ではない可能性があります。常に明示的にFALSEを入力してください。 - 間違い: カタログに列を挿入したら、すべてのVLOOKUPが壊れた。
修正: 上記のMATCHテクニックを使用して列番号を動的にします。すでに壊れてしまった場合は、検索と置換(Ctrl+H)で列番号を一括更新します。 - 間違い: 重複がある場合、VLOOKUPは最初の一致のみを返す。
修正: VLOOKUPは常に検索列の最初の一致を返します。すべての一致が必要な場合は、SMALL/IFの配列数式を使ったINDEX-MATCHに切り替えるか、最後の一致を返せるXLOOKUPにアップグレードします。
パワーユーザー向け高度なヒント
- VLOOKUP + MATCH による二次元検索:
=VLOOKUP(A2, Table, MATCH("Q3", Headers, 0), FALSE)で行(製品)と列(四半期)の両方を検索できます。"Q3"を"Q4"に1箇所だけ変更すれば、次の四半期のデータを取得できます。 - ワイルドカードによる部分一致:
=VLOOKUP("*"&A1&"*", Table, 2, FALSE)は、A1のテキストを含むセルを、長い文字列の中に埋もれていても見つけます。製品説明の検索に便利です。 - CHOOSE による逆方向検索: 右側の列で検索し、左側の列から返す必要がありますか?
=VLOOKUP(A2, CHOOSE({1,2}, D2:D100, A2:A100), 2, FALSE)が列を仮想的に入れ替え、VLOOKUPが最初に検索列を見られるようにします。 - XLOOKUPへの切り替え時: Excel 2021またはMicrosoft 365を使用している場合、XLOOKUPは上記のすべての制限を解消します — 左から右、右から左、デフォルトで完全一致、組み込みのエラー処理。構文:
=XLOOKUP(A2, SearchColumn, ReturnColumn, "見つかりません")。Excelが対応していれば、学ぶ価値があります。