「商品コードから価格を自動で表示したい」
「社員番号に対応する名前を引っ張ってきたい」
「別のシートにある情報を参照したい」
このような場面で威力を発揮するのが、VLOOKUP関数です。
指定した検索値に対応するデータを、縦方向(Vertical)に探して取得する、Excelで最もよく使われる検索関数の一つです。
この記事では、VLOOKUP関数の基本から応用、よくあるエラーの対処法まで、初心者の方にもわかりやすく詳しく解説します。
VLOOKUP関数の基本構文と概要

基本構文
=VLOOKUP(検索値, 範囲, 列番号, 検索の型)
パラメータの詳細
パラメータ | 説明 | 例 |
---|---|---|
検索値 | 探したい値・条件 | 社員番号「101」、商品コード「A001」 |
範囲 | 検索対象となる表全体 | A1:D100(検索列を含む全範囲) |
列番号 | 取得したいデータがある列の番号 | 1(最左列)、2(2列目)、3(3列目) |
検索の型 | 完全一致:FALSE、近似一致:TRUE | ほとんどの場合FALSE |
VLOOKUPの動作原理
- 検索値を範囲の最左列で探す
- 見つかった行の指定した列番号の値を取得
- 完全一致(FALSE)または近似一致(TRUE)で検索
基本的な使用例
社員情報の検索
# 社員マスター表(A列:社員番号、B列:氏名、C列:部署、D列:給与)
A B C D
1 社員番号 氏名 部署 給与
2 101 田中 営業 350000
3 102 佐藤 技術 400000
4 103 鈴木 総務 320000
5 104 高橋 営業 380000
# 社員番号102の氏名を取得
=VLOOKUP(102, A2:D5, 2, FALSE)
# 結果: 佐藤
# 社員番号103の部署を取得
=VLOOKUP(103, A2:D5, 3, FALSE)
# 結果: 総務
# 社員番号104の給与を取得
=VLOOKUP(104, A2:D5, 4, FALSE)
# 結果: 380000
商品情報の検索
# 商品マスター表
A B C D
1 商品コード 商品名 価格 在庫
2 P001 りんご 150 50
3 P002 バナナ 120 30
4 P003 オレンジ 200 25
5 P004 ぶどう 300 15
# 販売管理表で商品情報を自動取得
E F G H
1 商品コード 商品名 単価 数量
2 P002 =VLOOKUP(E2,$A$2:$D$5,2,FALSE) =VLOOKUP(E2,$A$2:$D$5,3,FALSE) 3
3 P004 =VLOOKUP(E3,$A$2:$D$5,2,FALSE) =VLOOKUP(E3,$A$2:$D$5,3,FALSE) 2
# 結果:
# E2: P002 → F2: バナナ, G2: 120
# E3: P004 → F3: ぶどう, G3: 300
セル参照での動的検索
検索値をセル参照で指定
# 検索用セルを作成(G1に社員番号を入力)
G1: 102
# 該当社員の情報を自動表示
H1: =VLOOKUP(G1, A2:D5, 2, FALSE) # 氏名
I1: =VLOOKUP(G1, A2:D5, 3, FALSE) # 部署
J1: =VLOOKUP(G1, A2:D5, 4, FALSE) # 給与
# G1の値を変更すると、H1~J1の値も自動で更新される
絶対参照と相対参照の使い分け
# 数式をコピーする場合の参照方法
# 相対参照(範囲がずれてしまう - 非推奨)
=VLOOKUP(E2, A2:D5, 2, FALSE)
# 絶対参照(範囲が固定される - 推奨)
=VLOOKUP(E2, $A$2:$D$5, 2, FALSE)
# 混在参照(行のみ固定、列のみ固定)
=VLOOKUP(E2, $A$2:$D5, 2, FALSE) # 列A,Dのみ固定
=VLOOKUP(E2, A$2:D$5, 2, FALSE) # 行2,5のみ固定
よくあるエラーとその対処法

#N/Aエラー:値が見つからない
最も頻出するエラーです。
# エラーの例
=VLOOKUP("105", A2:D5, 2, FALSE) # 社員番号105は存在しない
# 結果: #N/A
# 対処法1: IFERROR関数との組み合わせ
=IFERROR(VLOOKUP("105", A2:D5, 2, FALSE), "該当なし")
# 結果: 該当なし
# 対処法2: IF関数とISNA関数の組み合わせ
=IF(ISNA(VLOOKUP("105", A2:D5, 2, FALSE)), "見つかりません", VLOOKUP("105", A2:D5, 2, FALSE))
#REF!エラー:列番号が範囲を超えている
# エラーの例(範囲がA2:D5なのに列番号に5を指定)
=VLOOKUP(102, A2:D5, 5, FALSE)
# 結果: #REF!
# 対処法: 正しい列番号を指定
=VLOOKUP(102, A2:D5, 4, FALSE) # 4列目(D列)が最大
#VALUE!エラー:データ型の不一致
# エラーの例(数値と文字列の混在)
# A列に「101」(数値)があるのに、検索値が「"101"」(文字列)
=VLOOKUP("101", A2:D5, 2, FALSE)
# 対処法1: VALUE関数で型変換
=VLOOKUP(VALUE("101"), A2:D5, 2, FALSE)
# 対処法2: データ形式を統一
# A列を文字列形式にするか、検索値を数値にする
間違った値が返される:検索の型の設定ミス
# 危険な例(TRUEまたは省略)
=VLOOKUP(102, A2:D5, 2, TRUE) # 近似一致で検索
=VLOOKUP(102, A2:D5, 2) # 省略するとTRUEになる
# 正しい例(ほとんどの場合FALSEを使用)
=VLOOKUP(102, A2:D5, 2, FALSE) # 完全一致で検索
実用的なビジネス活用例
受注管理システム
# 顧客マスター(A列:顧客ID、B列:会社名、C列:担当者、D列:電話番号)
# 受注入力表
E F G H I
1 顧客ID 会社名 担当者 電話 受注額
2 C001 =VLOOKUP(E2,顧客マスター!$A:$D,2,FALSE) =VLOOKUP(E2,顧客マスター!$A:$D,3,FALSE) =VLOOKUP(E2,顧客マスター!$A:$D,4,FALSE) 500000
3 C003 =VLOOKUP(E3,顧客マスター!$A:$D,2,FALSE) =VLOOKUP(E3,顧客マスター!$A:$D,3,FALSE) =VLOOKUP(E3,顧客マスター!$A:$D,4,FALSE) 300000
# 顧客IDを入力するだけで、会社名・担当者・電話番号が自動入力される
在庫管理システム
# 商品マスターと出庫管理の連携
# 出庫管理表
A B C D E F
1 商品コード 商品名 単価 出庫数 金額 在庫確認
2 P001 =VLOOKUP(A2,商品マスター!$A:$D,2,FALSE) =VLOOKUP(A2,商品マスター!$A:$D,3,FALSE) 10 =C2*D2 =VLOOKUP(A2,商品マスター!$A:$D,4,FALSE)
3 P003 =VLOOKUP(A3,商品マスター!$A:$D,2,FALSE) =VLOOKUP(A3,商品マスター!$A:$D,3,FALSE) 5 =C3*D3 =VLOOKUP(A3,商品マスター!$A:$D,4,FALSE)
# 商品コードを入力すると、商品名・単価・在庫数が自動表示
成績管理システム
# 得点評価表(別シート)
A B
1 点数 評価
2 90 S
3 80 A
4 70 B
5 60 C
6 0 D
# 学生成績表
C D E
1 学生名 点数 評価
2 田中 85 =VLOOKUP(D2,評価表!$A:$B,2,TRUE)
3 佐藤 92 =VLOOKUP(D3,評価表!$A:$B,2,TRUE)
4 鈴木 67 =VLOOKUP(D4,評価表!$A:$B,2,TRUE)
# 注意: この場合はTRUE(近似一致)を使用
# 結果: 田中→A、佐藤→S、鈴木→C
複数シート・ワークブック間での検索

別シートからの検索
# 同一ワークブック内の別シート参照
=VLOOKUP(A2, 商品マスター!A:D, 2, FALSE)
=VLOOKUP(B3, 'シート名 スペース有'!$A$1:$D$100, 3, FALSE)
別ワークブックからの検索
# 別ファイルの参照(ファイルが開いている場合)
=VLOOKUP(A2, [商品マスター.xlsx]Sheet1!$A:$D, 2, FALSE)
# 別ファイルの参照(ファイルが閉じている場合)
=VLOOKUP(A2, 'C:\データ\[商品マスター.xlsx]Sheet1'!$A:$D, 2, FALSE)
VLOOKUPの制限と代替手段
VLOOKUPの制限事項
- 左側の列しか検索できない
# これはできない:B列で検索してA列の値を取得 # =VLOOKUP(検索値, A1:C10, 0, FALSE) # 列番号0は存在しない
- 完全一致での複数条件検索ができない
# 名前と部署の両方が一致する場合の検索は直接できない
- 検索範囲の最左列が検索対象
# 範囲がB1:E10の場合、B列でしか検索できない
代替手段:INDEX+MATCH関数
# VLOOKUPの制限を克服
# 右から左への検索が可能
=INDEX(A2:A10, MATCH(検索値, B2:B10, 0))
# 複数条件での検索
=INDEX(C2:C10, MATCH(1, (A2:A10=条件1)*(B2:B10=条件2), 0))
Excel 365のXLOOKUP関数
# より柔軟で強力な検索関数(Excel 365で利用可能)
=XLOOKUP(検索値, 検索配列, 戻り配列, [見つからない場合], [一致モード], [検索モード])
# VLOOKUPより柔軟
=XLOOKUP(A2, B:B, C:C, "該当なし") # 左右どちらでも検索可能
パフォーマンスの最適化
効率的なVLOOKUPの書き方
# 非効率な例(列全体を参照)
=VLOOKUP(A2, B:E, 2, FALSE)
# 効率的な例(必要な範囲のみ参照)
=VLOOKUP(A2, $B$1:$E$1000, 2, FALSE)
# データ量が多い場合の最適化
=VLOOKUP(A2, OFFSET($B$1, 0, 0, COUNTA($B:$B), 4), 2, FALSE)
大量データでの考慮事項
- 検索範囲をできるだけ小さく限定
- 絶対参照($)を適切に使用
- 不要な揮発性関数(INDIRECT等)を避ける
- 可能であればINDEX+MATCHを検討
高度な活用テクニック

2段階VLOOKUP
# まず大分類を検索し、その結果で小分類を検索
=VLOOKUP(VLOOKUP(A2, 大分類表!A:B, 2, FALSE), 小分類表!A:C, 3, FALSE)
条件付きVLOOKUP
# 条件によって検索先を変更
=IF(B2="国内", VLOOKUP(A2, 国内価格表!A:C, 3, FALSE), VLOOKUP(A2, 海外価格表!A:C, 3, FALSE))
VLOOKUP with 配列数式
# 複数の結果を一度に取得(Ctrl+Shift+Enter)
{=VLOOKUP(A2:A10, B:E, {2;3;4}, FALSE)}
トラブルシューティングチェックリスト
検索がうまくいかない場合の確認項目
- 検索値の確認
- データ型(数値 vs 文字列)
- 前後のスペース
- 見えない文字(改行、タブなど)
- 検索範囲の確認
- 範囲に検索値が含まれているか
- 検索値が最左列にあるか
- 絶対参照($)の設定
- 列番号の確認
- 範囲内の列番号か
- 1から始まる番号になっているか
- 検索の型の確認
- 完全一致:FALSE
- 近似一致:TRUE(ソート済みデータのみ)
まとめ
VLOOKUP関数は、Excelでのデータ処理において最も重要で使用頻度の高い関数の一つです。適切に活用することで、手動でのデータ照合作業を大幅に効率化できます。
重要なポイント
- 関数名に注意:「vloockup」ではなく「VLOOKUP」が正しい
- 基本構文:
=VLOOKUP(検索値, 範囲, 列番号, FALSE)
- 検索の型:ほとんどの場合は「FALSE」(完全一致)を使用
- 制限の理解:左側の列でしか検索できない
活用のベストプラクティス
場面 | 推奨方法 | 注意点 |
---|---|---|
基本的な検索 | VLOOKUP(..., FALSE) | 必ずFALSEを指定 |
エラー対策 | IFERROR(VLOOKUP(...), "") | ユーザビリティ向上 |
範囲固定 | $A$1:$D$100 | 数式コピー時の安全性 |
大量データ | INDEX+MATCH | パフォーマンス重視 |
コメント