VBA を使用して VLookup で別のシートを参照する

Bilal Shahid 2023年6月21日
  1. VLookup 関数とは
  2. VLookup を使用して VBA で別のシートを参照する
  3. まとめ
VBA を使用して VLookup で別のシートを参照する

VBA は Visual Basic for Applications の略です。 Excel、Word、PowerPoint など、すべての Microsoft Office アプリケーション用のプログラミング言語です。

VBA を使用すると、ユーザーはマクロと呼ばれるコードを記述して、Microsoft Office アプリケーションでの時間を最適化できます。 このようにして、ユーザーは同じアクションを手動で繰り返し実行する代わりに、タスクの マクロ を実行して自動化することができ、時間を節約できます。

VBA は開発者にさまざまな機能を提供します。 この記事では、VLookup 関数とその使用方法、特に別のシートを参照する場合について学習します。

VLookup 関数とは

VLookup 関数は、テーブルまたは範囲内の特定の行の値を検索するときに Excel で使用されます。 これは、大きなスプレッドシートで作業する場合に非常に便利です。 対応する値を手動で探すと、人的エラーが発生する可能性があります。

VLookup 関数の構文は次のとおりです。

VLOOKUP(lookup_value, Sheet!range, col_index_num, [range_lookup])

パラメーター:

VLookup 関数は、上記の構文に示すように 4つのパラメーターを取ります。 これらについて以下に説明します。

  1. lookup_value - 行の値を検索するセルです。

  2. Sheet!range - ここでは、ルックアップ値と戻り値が配置されるセルの範囲を定義します。 原則として、ルックアップ値は常に指定された範囲の最初の列にある必要があります。そうしないと、VLookup 関数が正しく機能しません。

  3. col_index_num - 原則として、ここで指定された列番号は、前に指定された範囲内に存在する必要があります。 列は 1 からカウントされます。

    たとえば、範囲として C3:F10 を指定した場合、C は列番号 1、D は列番号 2、E は列番号 3 などです。

  4. range_lookup - 最後のパラメーターはオプションで、正確な戻り値または概算の戻り値のどちらが必要かを指定できます。 正確な値を得るには、FALSE または 0 を指定します。 おおよその値については、TRUE または 1 を書きます。

    このパラメーターが指定されていない場合、デフォルト値は TRUE であり、おおよその結果が返されます。

上記で説明した構文とパラメーターは、例を通して最もよく説明できます。 次の Excel シートがあるとします。

シート例

ID 1004 を持つ従業員の名前を調べたいとします。 VLookup 関数を使用して、次のコードを使用してこれを行います。

Sub example()
On Error Resume Next
Range("C8") = Application.WorksheetFunction.VLookup(Range("A5"), Range("A2:D6"), 3, False)
End Sub

このコードを VBA で実行すると、ID 1004 に対応する名前がセル C8 に返されます。

出力例

注: On Error Resume Next 行は、次の行からコードを再開することによって対応する値が見つからない場合に、VBA が Error 1004 をスローするのを防ぎます。

VBA の VLookup 関数について学習したので、それを使用して別のシートからセルを参照する方法を説明しましょう。

VLookup を使用して VBA で別のシートを参照する

対応するセルの値を検索したいが、値が存在する範囲が別のシートにあるとします。

このような場合、別のシートを参照するにはどうすればよいでしょうか。 例を通してそれを学びましょう。

上記の同じ例に加えて、以下に示すように、従業員 ID とその連絡先情報のみを含む別のシートがあるとします。

連絡先情報を含むサンプル シート

ここでわかるように、Contact 列の最後のセルは空です。これは、ID 1005 を持つ従業員の連絡先情報がないことを意味します。

ここでのタスクは、ID 1005 に対応する Sheet1 から Contact 値を検索し、必要に応じて ID 1005 に対して Sheet2 のセル B6 に書き込むことです。 これを行うには、いくつかの変更を加えて VLookup 関数を簡単に使用できます。

VLookup関数のパラメーターで行う必要がある主な調整は、範囲内で参照しているセルのシートを指定することです。 そうしないと、あいまいさが生じ、誤った結果が生じる可能性があります。

この目的のための 1つの解決策は、シート名を Worksheet 変数として定義し、それらを使用して適切なセルを参照することです。 このための VBA コードは次のとおりです。

Sub example2()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
On Error Resume Next
ws2.Range("B6") = Application.WorksheetFunction.VLookup(ws2.Range("A6"), ws1.Range("A2:D6"), 4, False)
End Sub

ここでは、範囲が言及されるたびに、あいまいさを避けるためにそれが属するシートを指定していることがわかります。 この VBA コードを実行すると、Sheet2 の状態は次のようになり、コードが正しく実行されていることが示されます。

VBA で別のシートを参照

ただし、個別の変数を宣言したくない場合は、シート名を Worksheet として直接参照できます。 次のコードはこれに対して機能し、同じ出力を生成します。

Sub example()
On Error Resume Next
Worksheets("Sheet2").Range("B6") = Application.WorksheetFunction.VLookup(Worksheets("Sheet2").Range("A6"), Worksheets("Sheet1").Range("A2:D6"), 4, False)
End Sub

直接参照

まとめ

これは、Microsoft Office ユーザーの貴重な時間を節約する便利なプログラミング言語である VBA の VLookup 関数に関する説明をまとめたものです。

VBA で VLookup 関数を使用して、アクティブなシート以外の他のシートのセルを参照する方法を学習したことを願っています。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub