▲ Lookup サンプル
この記事でわかること
- VLOOKUPの基本構文と引数の意味
- 商品マスタ・社員テーブルなど職場で使える実践例2つ
- よくあるエラーの原因と具体的な直し方
- 複数列を一度に取得するテクニック
- VLOOKUPの限界と、次のステップ(INDEX+MATCHへの移行判断)
この記事を読み終えると、2つのシートのデータをVLOOKUPでつなぐ数式をその場で書けるようになります。
VLOOKUPとは?テーブル結合の基本
「あのシートにある情報を、こっちの表に自動で引っ張ってきたい」という場面はExcelやスプレッドシートを使っていれば必ず出てきます。そのたびに手でコピペしていると、入力ミスやデータのズレが起きがちです。
そこで使うのが VLOOKUP関数 です。指定したキー(商品IDや社員番号など)をもとに、別のテーブルから対応するデータを自動で取得できます。マスタデータを1か所で管理しながら、複数の表に正確な値を反映できるのが最大のメリットです。
基本構文
=VLOOKUP(検索値, 検索範囲, 列番号, FALSE)
| 引数 | 説明 |
|---|---|
| 検索値 | 検索したいキー(例:商品ID、社員番号) |
| 検索範囲 | 参照先テーブルの範囲(キー列が左端である必要あり) |
| 列番号 | 取得したい値が検索範囲の左から何列目か |
| FALSE | 完全一致(ほぼ必ずFALSEを指定する) |
実践例①:商品マスタから単価を自動取得する
テーブル構成
受注テーブル(Sheet1)
| A: 注文ID | B: 商品ID | C: 数量 | D: 単価(ここに数式を入れる) |
|---|---|---|---|
| 1001 | P003 | 2 | ? |
| 1002 | P001 | 5 | ? |
商品マスタ(Sheet2)
| A: 商品ID | B: 商品名 | C: 単価 |
|---|---|---|
| P001 | ノート | 120 |
| P002 | ペン | 80 |
| P003 | 消しゴム | 50 |
数式(Sheet1のD2に入力)
=VLOOKUP(B2, Sheet2!$A:$C, 3, FALSE)
B2:検索値(商品ID "P003")Sheet2!$A:$C:商品マスタ全体($で固定→後述)3:単価はA列から数えて3列目FALSE:完全一致
これでSheet2の "P003" に対応する単価「50」が自動取得されます。
絶対参照を忘れると起きる失敗
Sheet2!$A:$C の $ を外して Sheet2!A:C と書いた場合、D3に数式をコピーしたとき参照がB:Dにズレて #REF! エラーが出ます。数式をコピーして使う列や行には必ず $ をつけるのが鉄則です。
実践例②:社員テーブルに部署名を結合する
テーブル構成
社員テーブル
| 社員ID | 氏名 | 部署コード | 部署名(取得したい) |
|---|---|---|---|
| E001 | 山田太郎 | D02 | ? |
| E002 | 鈴木花子 | D01 | ? |
部署マスタ
| 部署コード | 部署名 |
|---|---|
| D01 | 営業部 |
| D02 | 開発部 |
| D03 | 総務部 |
数式
=VLOOKUP(C2, 部署マスタ!$A:$B, 2, FALSE)
部署コードをキーに部署名を引っ張るだけで、社員が増えても部署名の入力ミスがなくなり、データの一貫性が保たれます。
複数列のデータを一度に取得する
VLOOKUPは1つの数式で取得できるのは1列だけです。複数列が必要な場合は、列番号だけ変えた数式を並べます。
D2: =VLOOKUP(B2, Sheet2!$A:$C, 2, FALSE) ← 商品名(2列目) E2: =VLOOKUP(B2, Sheet2!$A:$C, 3, FALSE) ← 単価(3列目)
よくあるエラーと対処法
#N/A エラー(検索値が見つからない)
最もよく見るエラーです。主な原因は次の3つです。
① スペースの混入 セルの値が "P003 "(末尾スペースあり)になっていると一致しません。
=VLOOKUP(TRIM(B2), Sheet2!$A:$C, 3, FALSE)
TRIM() で前後のスペースを取り除いてから検索します。
② データ型の不一致 片方が数値「123」、もう片方が文字列「"123"」になっているケースです。
=VLOOKUP(TEXT(B2,"0"), Sheet2!$A:$C, 3, FALSE)
TEXT() や VALUE() で型を揃えてから使います。
③ キー列が検索範囲の左端にない VLOOKUPは必ずキー列が範囲の一番左になければいけません。テーブルの列順を見直してください(これが頻繁に問題になる場合はINDEX+MATCHへの乗り換えを検討する目安です)。
エラーを「未登録」などの文字で置き換えたいときは IFERROR を使います:
=IFERROR(VLOOKUP(B2, Sheet2!$A:$C, 3, FALSE), "未登録")
#REF! エラー(列番号が範囲を超えている)
検索範囲が $A:$B(2列)なのに列番号に 3 を指定したときに発生します。列番号を検索範囲の列数以内に修正するか、検索範囲を広げてください。
VLOOKUPを使うときの注意点まとめ
- キー列は検索範囲の左端に配置する
- 数式コピー時のズレを防ぐため絶対参照(
$)を使う - 第4引数は基本的に
FALSE(完全一致) - キーに重複がある場合、最初に見つかった行の値が返される
- データ量が非常に多い場合はパフォーマンスに影響が出ることがある
まとめと次のステップ
VLOOKUPは「検索値・範囲・列番号・FALSE」の4つを押さえるだけで、別テーブルのデータを手軽に自動取得できる関数です。手入力ミスを減らし、マスタデータの一元管理を実現できます。
VLOOKUPの限界を感じたら INDEX+MATCH へ
- キー列が左端に置けない構造のテーブルを扱う場合
- 数式のメンテナンスコストを下げたい場合
このような状況になったら INDEX + MATCH(またはGoogleスプレッドシートなら XLOOKUP)への移行を検討するタイミングです。次の記事ではその具体的な乗り換え方法を解説します。
関連記事
- 担当者別・カテゴリ別の最大値を確実に取り出す!MAX+IF・MAXIFSの完全使い分けガイド
- 送料・割引テーブルを自動判定!MATCH -1 で「次に大きい値」を取得するExcel技
- ExcelのMATCHに潜む「255文字の壁」をEXACT・LEFT・MIDで突破する完全照合術【Lookupシリーズ】
- Excelで「含まない」最初のセルを取る方法――INDEX+MATCHで逆転発想
- 【Lookup活用術】#N/Aが混じったデータでも確実に値を取れる MATCH+ISERROR の使い方