「またVLOOKUP関数を下のセルまでドラッグする作業か……」
こんなふうにため息をついたことはありませんか?
実を言うと、私も過去に5万行のデータへ一斉にVLOOKUP関数を入力し、Excelをフリーズさせてしまった苦い経験があります。
そんな「手作業の限界」や「処理の重さ」を劇的に解消してくれるのが、VBAからVLOOKUP関数を呼び出す方法です。
WorksheetFunctionとは?
簡単に言うと、「Excelの便利な関数を、VBAというロボットに代行してもらうための合言葉」のようなものです。
通常、VLOOKUP関数はワークシートのセルに直接入力しますが、これではデータ量が増えるにつれて再計算の負荷が高まり、Excelの動作が重くなってしまいます。
しかし、VBAの内部で計算を完結させれば、セルには「最終的な結果だけ」が書き込まれるため、全体の動作が劇的に軽くなります。
基本の書き方(コピペで使えるサンプルコード)
例えば、「商品ID」を基準に「単価」を検索し、セルB2にその結果を表示させるコードは、以下のように非常にシンプルです。
Sub SimpleVlookup()
Dim result As Variant
Dim searchKey As String
' 検索したいキーワード(例:商品コード)
searchKey = Range("A2").Value
' WorksheetFunctionを使ってVLOOKUPを実行
' 引数は通常のExcel関数と同じ(検索値, 範囲, 列番号, 検索方法)
' 検索方法は 0 (False) で完全一致
result = Application.WorksheetFunction.VLookup(searchKey, Range("E:F"), 2, 0)
' 結果をセルB2に表示
Range("B2").Value = result
End Sub
初心者がハマりやすい「エラー」の壁と回避策
VBAでVLOOKUP関数を扱う際、最も注意すべきなのが「検索する値が見つからない(#N/Aエラー)」というケースです。
通常のワークシート上であればエラー値が表示されるだけで済みますが、VBAの処理中に対策なしでこれが発生すると、プログラムそのものが強制終了してしまいます。
これを防ぐためには、あらかじめエラーが発生しても「そのまま処理を続けてください」とVBAに指示を出しておく必要があります。
Sub SafeVlookup()
Dim result As Variant
Dim searchKey As String
searchKey = Range("A2").Value
' エラーが起きても無視して次へ進む
On Error Resume Next
' VLOOKUP実行
result = Application.WorksheetFunction.VLookup(searchKey, Range("E:F"), 2, 0)
' エラーが起きた(見つからなかった)場合の処理
If Err.Number <> 0 Then
Range("B2").Value = "未登録"
Err.Clear ' エラー情報をリセット
Else
Range("B2").Value = result
End If
' エラー無視の設定を解除
On Error GoTo 0
End Sub
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント