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つのパラメーターを取ります。 これらについて以下に説明します。
-
lookup_value
- 行の値を検索するセルです。 -
Sheet!range
- ここでは、ルックアップ値と戻り値が配置されるセルの範囲を定義します。 原則として、ルックアップ値は常に指定された範囲の最初の列にある必要があります。そうしないと、VLookup
関数が正しく機能しません。 -
col_index_num
- 原則として、ここで指定された列番号は、前に指定された範囲内に存在する必要があります。 列は 1 からカウントされます。たとえば、範囲として
C3:F10
を指定した場合、C
は列番号 1、D
は列番号 2、E
は列番号 3 などです。 -
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
の状態は次のようになり、コードが正しく実行されていることが示されます。
ただし、個別の変数を宣言したくない場合は、シート名を 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
関数を使用して、アクティブなシート以外の他のシートのセルを参照する方法を学習したことを願っています。
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