VBAで自動化 VBA一覧 比較 配列・データ操作

【VBA】VLOOKUP を別シートで使う方法と実用例

Excel でデータ検索といえばおなじみの "=VLOOKUP" 関数。
VBA でもこの関数をセルに書き込んだり、別シートを参照して VLOOKUP を使う ことができます。

本記事では、Excel VBA を使って別シートのデータを VLOOKUP で検索する方法とその書き方のポイント を解説します。

VBAでVLOOKUPをセルに書き込む基本

まずは、通常のVLOOKUPをVBAから書き込む方法です。

✅ 例:A2 の値を使って B2 に VLOOKUP を設定する

Sub SetVlookupFormula()

Range("B2").Formula = "=VLOOKUP(A2, Sheet2!A:B, 2, FALSE)"

End Sub

📌 このコードでは、Sheet2 の A列~B列から A2 の値を検索し、B列の値を取得しています。
📌 ここでは Formula プロパティを使用して、数式として VLOOKUP を書き込んでいます。

【VBA】FormulaR1C1 プロパティで絶対参照を行う方法

VBAで別シートを参照するVLOOKUPを設定する

✅ 例:"Sheet1" に "Sheet2" のデータを参照する VLOOKUP を設定

Sub VlookupAcrossSheets()

Worksheets("Sheet1").Range("B2").Formula = _
"=VLOOKUP(A2, Sheet2!A:B, 2, FALSE)"

End Sub

📌 Worksheets("Sheet1") を指定して、別シートのセルに数式を設定できます。
📌 数式内で参照される Sheet2!A:B によって、別シートを検索対象にしています。

【VBA】文字列(cells・range・value)として取得する方法

VBAでR1C1形式を使ってVLOOKUPを設定

R1C1形式は、行番号と列番号で参照する記述法です。より動的な数式の生成に向いています。

Sub VlookupWithR1C1()

With Worksheets("Sheet1").Range("B2")

.FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet2!C1:C2, 2, FALSE)"

End With

End Sub

📌 RC[-1] は「左隣のセル」、つまり A2 の値を参照します。
📌 このように R1C1 形式を使えば、列位置がずれても正確に参照できます。

シート名にスペースがある場合の注意点

シート名にスペースがある場合、シート名を '(シングルクォート)で囲む必要 があります。

Sub VlookupWithSpaceInSheetName()

Worksheets("Sheet1").Range("B2").Formula = _
"=VLOOKUP(A2, '売上 データ'!A:B, 2, FALSE)"

End Sub

📌 "売上 データ" のようにスペースを含む場合、'売上 データ'! と囲って指定します。

【VBA】シート全体のスペースを削除する方法:Trim 関数・Replace 関数

複数行にVLOOKUPを設定する(ループ)

✅ 例:Sheet1 の A2:A10 に対し、Sheet2 を検索して B列に結果を入れる

Sub VlookupMultipleRows()

Dim i As Long
For i = 2 To 10

Worksheets("Sheet1").Cells(i, 2).Formula = _
"=VLOOKUP(A" & i & ", Sheet2!A:B, 2, FALSE)"

Next i

End Sub

📌 A列にあるキーを使って、B列にVLOOKUPの結果を自動入力するループ処理です。
📌 データ量に応じて 10Cells(Rows.Count, 1).End(xlUp).Row に置き換えるとより汎用的になります。

【VBA】For文:空白行まで繰り返す処理方法

VBAでVLOOKUPの値を直接取得する(関数を使わず)

数式ではなく、VBA の関数として VLOOKUP 相当の動きをしたい場合は WorksheetFunction.VLookup を使います。

Sub VlookupFunctionExample()

Dim result As Variant
result = Application.WorksheetFunction.VLookup("商品A", Sheets("Sheet2").Range("A:B"), 2, False)

MsgBox "検索結果:" & result

End Sub

📌 "商品A" をキーとして、Sheet2 の A:B 範囲から値を取得し、メッセージで表示します。
📌 見つからないとエラーになるため、On Error Resume Next で対策することもあります。

・よくあるエラーと対策

エラー内容原因解決策
#N/A該当する値が見つからない検索範囲・値の正確性を確認
実行時エラー 1004シート名や範囲が誤っているシート名・セル参照をダブルチェック
"WorksheetFunction.VLookup" エラー見つからないとクラッシュOn Error Resume Next で事前対応する

・まとめ

内容方法
数式として別シート参照.Formula = "=VLOOKUP(…)"
R1C1形式で動的に指定.FormulaR1C1 = "=VLOOKUP(RC[-1], 'Sheet名'!C1:C2, 2, FALSE)"
シート名にスペースあり=VLOOKUP(A2, 'Sheet 名'!A:B, 2, FALSE)
複数行に適用For ループで .Formula を連続指定
関数として直接値取得Application.WorksheetFunction.VLookup

-VBAで自動化, VBA一覧, 比較, 配列・データ操作