
VLOOKUPは、Excelで最も広く使われている関数のひとつです。顧客IDと名前を照合する、製品カタログから価格を取得する、2つの異なるシートのデータを結合するなど、VLOOKUPはたった1つの数式でさまざまな作業をこなします。このガイドでは、構文・実践的な例・よくある落とし穴・別の関数が適している場面まで、必要な情報をすべて網羅します。
VLOOKUPは垂直方向の検索(Vertical Lookup)を意味します。範囲の先頭列で値を検索し、同じ行にある指定した列の値を返します。Excelにキーを渡して検索場所を指示し、同じレコードから特定の情報を取り出す、精密な検索操作だとイメージするとわかりやすいでしょう。
代表的な実務での使用例:
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
各引数には固有の役割があります:
| 引数 | 必須? | 意味 |
|---|---|---|
| lookup_value | はい | 検索したい値。セル参照、数値、またはテキスト文字列を指定します。 |
| table_array | はい | データが含まれる範囲。検索列はこの範囲の一番左の列である必要があります。 |
| col_index_num | はい | 返したい値が含まれる列番号(table_arrayの左端から数えた番号)。 |
| range_lookup | いいえ | 完全一致の場合はFALSE(または0)、近似一致の場合はTRUE(または1)。省略するとTRUEが既定値になります。 |
重要:並べ替え済みのテーブルで近似一致(成績区分や税率区分の検索など)が本当に必要な場合を除き、第4引数には必ずFALSEを指定してください。省略したり、並べ替えていないデータにTRUEを使ったりすることは、誤った結果が返される主な原因になります。
Sheet1に小さな製品カタログがあり、Sheet2の注文フォームに価格を引き込みたい場面を想定します。Sheet1のデータは次のとおりです:
| A — SKU | B — 製品名 | C — 価格 |
|---|---|---|
| P001 | ワイヤレスマウス | $29.99 |
| P002 | USB-Cハブ | $49.99 |
| P003 | メカニカルキーボード | $89.99 |
| P004 | モニタースタンド | $34.99 |
Sheet2の列Aにはユーザーが入力したSKUが含まれています。Sheet2の列Bに製品名を返すには、次のように入力します:
=VLOOKUP(A2, Sheet1!$A$2:$C$5, 2, FALSE)
Sheet2の列Cに価格を返すには、列インデックスを3に変更します:
=VLOOKUP(A2, Sheet1!$A$2:$C$5, 3, FALSE)
Sheet1!$A$2:$C$5のドル記号に注目してください。これにより範囲が固定され、数式を他の行にコピーしてもtable_arrayがずれなくなります。セル参照の仕組みについて詳しくは、Excelのセル参照を解説:相対参照と絶対参照の記事を参照してください。
検索テーブルが昇順に並べ替えられており、検索値以下で最も近い値を返したい場合は、第4引数をTRUEにします。生の得点を成績に変換する場合が典型的な例です:
=VLOOKUP(B2, $E$2:$F$6, 2, TRUE)
| E — 最低点 | F — 成績 |
|---|---|
| 0 | F |
| 60 | D |
| 70 | C |
| 80 | B |
| 90 | A |
85点の場合は80の行に一致し、「B」が返されます。最低点の列が低い順に並んでいるため、この処理が正しく機能します。
最も頻繁に発生するエラーです。テーブルの先頭列でlookup_valueが見つからなかったことを意味します。次の点を確認してください:
デバッグ中にエラーを非表示にするには、数式をIFERRORで囲みます:=IFERROR(VLOOKUP(A2, $D$2:$F$10, 2, FALSE), "見つかりません")
col_index_numがtable_arrayの列数より大きい場合に表示されます。たとえば、範囲が3列しかないのに列5を指定した場合です。列数を確認し、インデックスを適切な値に修正してください。
通常、col_index_numがゼロか数値以外の値になっていることが原因です。列インデックスは1以上の正の整数を指定する必要があります。
第4引数を省略したり(またはTRUEに設定したり)、テーブルが並べ替えられていない場合、VLOOKUPはエラーメッセージを出さずに誤った近似一致の値を返すことがあります。完全一致には必ずFALSEを使用してください。
VLOOKUPと論理関数を組み合わせることで、より細かい条件分岐を実現できます。たとえば、検索が成功した場合にのみ割引を表示するには:
=IF(IFERROR(VLOOKUP(A2, $D$2:$F$10, 3, FALSE), "") = "", "割引なし", VLOOKUP(A2, $D$2:$F$10, 3, FALSE))
数式内での論理テストの構築方法については、IF関数:論理テストとネストされたIFの完全ガイドをご覧ください。
別のシートのデータを参照するには、範囲の前にシート名を付けます:
=VLOOKUP(A2, Catalog!$A$2:$C$100, 2, FALSE)
別のブックを参照するには(ブックが開いている場合):
=VLOOKUP(A2, [PriceList.xlsx]Sheet1!$A$2:$C$100, 2, FALSE)
ブックが閉じている場合、両方のファイルを開いた状態でリンクすると、Excelが自動的にフルファイルパスを表示します。
INDEX MATCHの組み合わせは、先頭列の制限がなく、列の追加や並べ替えに対してより堅牢です。VLOOKUPの制限に悩んでいる場合は、INDEX MATCH:より優れた検索方法の専用記事でステップバイステップの移行手順を確認してください。
Excel 365およびExcel 2021で使用できるXLOOKUPは、よりシンプルで高機能です:
=XLOOKUP(A2, Sheet1!$A$2:$A$5, Sheet1!$C$2:$C$5, "見つかりません")
任意の方向を検索でき、欠損値をネイティブに処理でき、数値の列インデックスも不要です。お使いのExcelのバージョンがXLOOKUPに対応しているなら、新規プロジェクトではXLOOKUPの使用を検討してください。
VLOOKUPは他の多くのExcelワークフローと組み合わせて使うと効果的です。たとえば、KPIとパフォーマンスを追跡する売上ダッシュボードでは、参照テーブルから製品名や担当者のエリアをサマリーレポートに引き込むためにVLOOKUPがよく使われます。同様に、プロフェッショナルな請求書テンプレートの作成においても、ユーザーが入力した品目コードをもとに製品リストから単価を取得するVLOOKUPがほぼ必ず登場します。
大規模なデータセットを扱うチームには、VLOOKUPとピボットテーブルを組み合わせるワークフローが効果的です。VLOOKUPでカテゴリラベルを生データに付加してから、ピボットテーブルで集計します。
必要な処理はわかっているのに正確な構文が思い出せない場合、たとえば「HRシートのA列にある社員IDを検索して、D列の給与を返す」といった内容を日本語で入力するだけで、GPTExcelが正しいVLOOKUPの数式をすぐに生成し、スプレッドシートに貼り付けられる状態で提供します。
最も可能性が高い原因は、特定のセルのデータ型の不一致や余分な空白です。検索値に=TRIM(A2)を適用し、検索列のすべてのエントリが同じデータ型(すべてテキストまたはすべて数値)で保存されているか確認してください。また、=IFERROR(VLOOKUP(...), "データを確認")を使うと、レポート全体を壊さずに問題のある行を特定できます。
従来の意味では、1つの数式では返せません。返したい列ごとにcol_index_numだけを変えたVLOOKUPを個別に作成する必要があります。または、Excel 365のXLOOKUPであれば、複数列の戻り範囲を指定することで1つの数式で行全体の結果を返すことができます。
VLOOKUPは常に上から下に向かってスキャンし、最初に一致した値に対応する結果を返します。検索列に重複がある場合、それ以降の一致は無視されます。重複を含む場面では、ピボットテーブルを使用するか、検索前にヘルパー列で重複を除外することを検討してください。
区別しません。VLOOKUPは大文字と小文字を同一として扱います。「apple」で検索すると「Apple」や「APPLE」にも一致します。大文字と小文字を区別した検索が必要な場合は、EXACT()とINDEX/MATCHを組み合わせた配列数式を使用する必要があります。
ExcelのTEXT関数が書式コードを使って数値、日付、時刻を書式付きテキスト文字列に変換する方法を、実際の例と実践的なユースケースを交えて解説します。
ExcelのIF関数の仕組み、複数のIFをネストする方法、そしてより読みやすいロジックを実現するIFSやSWITCHなどの最新の代替関数について解説します。
ExcelのSUMIFとSUMIFSをマスターして、1つまたは複数の条件に基づいてデータを合計する方法を、実際の構文・実践的な例・ステップバイステップの解説で学びましょう。