doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

VLOOKUPで別テーブルのデータを自動取得する方法【コピペOKの実例付き】

スポンサーリンク


VLOOKUPで別テーブルのデータを自動取得する方法【コピペOKの実例付き】のサンプル ▲ 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を使うときの注意点まとめ

  1. キー列は検索範囲の左端に配置する
  2. 数式コピー時のズレを防ぐため絶対参照($を使う
  3. 第4引数は基本的に FALSE(完全一致)
  4. キーに重複がある場合、最初に見つかった行の値が返される
  5. データ量が非常に多い場合はパフォーマンスに影響が出ることがある

まとめと次のステップ

VLOOKUPは「検索値・範囲・列番号・FALSE」の4つを押さえるだけで、別テーブルのデータを手軽に自動取得できる関数です。手入力ミスを減らし、マスタデータの一元管理を実現できます。

VLOOKUPの限界を感じたら INDEX+MATCH へ

  • キー列が左端に置けない構造のテーブルを扱う場合
  • 数式のメンテナンスコストを下げたい場合

このような状況になったら INDEX + MATCH(またはGoogleスプレッドシートなら XLOOKUP)への移行を検討するタイミングです。次の記事ではその具体的な乗り換え方法を解説します。


関連記事

あわせてチェック