【重要】ExcelのVLOOKUP関数の使い方|表から値を取り出す関数をマスター!

Excel

「商品コードから価格を自動で表示したい」
「社員番号に対応する名前を引っ張ってきたい」
「別のシートにある情報を参照したい」

このような場面で威力を発揮するのが、VLOOKUP関数です。

指定した検索値に対応するデータを、縦方向(Vertical)に探して取得する、Excelで最もよく使われる検索関数の一つです。

この記事では、VLOOKUP関数の基本から応用、よくあるエラーの対処法まで、初心者の方にもわかりやすく詳しく解説します。

スポンサーリンク

VLOOKUP関数の基本構文と概要

基本構文

=VLOOKUP(検索値, 範囲, 列番号, 検索の型)

パラメータの詳細

パラメータ説明
検索値探したい値・条件社員番号「101」、商品コード「A001」
範囲検索対象となる表全体A1:D100(検索列を含む全範囲)
列番号取得したいデータがある列の番号1(最左列)、2(2列目)、3(3列目)
検索の型完全一致:FALSE、近似一致:TRUEほとんどの場合FALSE

VLOOKUPの動作原理

  1. 検索値を範囲の最左列で探す
  2. 見つかった行の指定した列番号の値を取得
  3. 完全一致(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の制限事項

  1. 左側の列しか検索できない # これはできない:B列で検索してA列の値を取得 # =VLOOKUP(検索値, A1:C10, 0, FALSE) # 列番号0は存在しない
  2. 完全一致での複数条件検索ができない # 名前と部署の両方が一致する場合の検索は直接できない
  3. 検索範囲の最左列が検索対象 # 範囲が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)}

トラブルシューティングチェックリスト

検索がうまくいかない場合の確認項目

  1. 検索値の確認
    • データ型(数値 vs 文字列)
    • 前後のスペース
    • 見えない文字(改行、タブなど)
  2. 検索範囲の確認
    • 範囲に検索値が含まれているか
    • 検索値が最左列にあるか
    • 絶対参照($)の設定
  3. 列番号の確認
    • 範囲内の列番号か
    • 1から始まる番号になっているか
  4. 検索の型の確認
    • 完全一致:FALSE
    • 近似一致:TRUE(ソート済みデータのみ)

まとめ

VLOOKUP関数は、Excelでのデータ処理において最も重要で使用頻度の高い関数の一つです。適切に活用することで、手動でのデータ照合作業を大幅に効率化できます。

重要なポイント

  1. 関数名に注意:「vloockup」ではなく「VLOOKUP」が正しい
  2. 基本構文=VLOOKUP(検索値, 範囲, 列番号, FALSE)
  3. 検索の型:ほとんどの場合は「FALSE」(完全一致)を使用
  4. 制限の理解:左側の列でしか検索できない

活用のベストプラクティス

場面推奨方法注意点
基本的な検索VLOOKUP(..., FALSE)必ずFALSEを指定
エラー対策IFERROR(VLOOKUP(...), "")ユーザビリティ向上
範囲固定$A$1:$D$100数式コピー時の安全性
大量データINDEX+MATCHパフォーマンス重視

コメント

タイトルとURLをコピーしました