【Excel VBA】VLOOKUPやSUMIF等のワークシート関数をVBAで利用する方法

VBAには独自の関数が多数用意されていますが、普段Excelのセルで使い慣れている便利なワークシート関数(SUM, COUNTIF, VLOOKUPなど)をマクロの中でも使いたい、と思う場面は非常に多いです。

VBAのWorksheetFunctionオブジェクトを使えば、これらのワークシート関数をVBAコードの中から直接呼び出すことができます。この記事では、その基本的な使い方と、特にVLOOKUPなどで重要になるエラー処理のテクニックを解説します。


目次

基本的な使い方 (WorksheetFunctionオブジェクト)

VBAからワークシート関数を利用するには、WorksheetFunctionオブジェクトを介して呼び出します。

Application.WorksheetFunction.関数名(引数)

Applicationは省略可能なため、多くの場合WorksheetFunction.関数名(引数)と記述します。

コード例(SUM関数)

Sub UseSumFunction()

    ' 変数を宣言します
    Dim targetRange As Range
    Dim result As Double
    
    ' 合計したいセル範囲を設定
    Set targetRange = ThisWorkbook.Worksheets("Sheet1").Range("C2:C10")
    
    ' WorksheetFunction.Sum を使って合計値を計算
    result = WorksheetFunction.Sum(targetRange)
    
    ' 結果を表示
    MsgBox "指定範囲の合計値は " & result & " です。"

End Sub

このように、SUMAVERAGEMAXといった、引数が正しければ通常エラーにならない関数は非常に簡単に利用できます。


【最重要】エラー処理の違いについて (VLOOKUP, MATCHなど)

問題は、VLOOKUPMATCHのように、検索値が見つからない場合にエラーを返す可能性がある関数の扱いです。

セル上でVLOOKUPが見つからない場合は「#N/A」というエラー値が表示されますが、VBAのWorksheetFunctionで同じ状況になると、マクロが実行時エラーで停止してしまいます。 これを防ぐためには、エラー処理の方法を知っておく必要があります。

方法1:On Error を使ってエラーを回避する

伝統的なエラーハンドリングです。On Error Resume Nextでエラーを無視させ、エラーが発生したかどうかをErr.Numberで判定します。

Sub Vlookup_WithErrorHandling_OnError()
    Dim result As Variant
    Dim lookupValue As String
    
    lookupValue = "商品C" ' 検索する値
    
    On Error Resume Next ' エラーが発生しても次の行へ進む
    result = WorksheetFunction.VLookup(lookupValue, Range("A1:B10"), 2, False)
    On Error GoTo 0 ' エラー処理を元に戻す
    
    If IsEmpty(result) Then ' エラーが発生した場合、resultはEmptyになる
        MsgBox lookupValue & " は見つかりませんでした。"
    Else
        MsgBox "結果: " & result
    End If
End Sub

方法2:Applicationオブジェクトで直接呼び出す(推奨)

よりスマートで推奨される方法が、WorksheetFunctionを介さず、Applicationオブジェクトから直接関数を呼び出す方法です。

この方法の場合、関数がエラーになってもマクロは停止せず、戻り値としてエラー値(Variant/Error型)が返されます。 これをIsError関数で判定するのが定石です。

Sub Vlookup_WithErrorHandling_IsError()
    Dim result As Variant
    Dim lookupValue As String
    
    lookupValue = "商品D" ' 検索する値
    
    ' Applicationから直接VLookupを呼び出す
    result = Application.VLookup(lookupValue, Range("A1:B10"), 2, False)
    
    ' IsError関数で、戻り値がエラー値かどうかを判定
    If IsError(result) Then
        MsgBox lookupValue & " は見つかりませんでした。(IsErrorで判定)"
    Else
        MsgBox "結果: " & result
    End If
End Sub

この方法はコードがシンプルになり、意図も分かりやすいため、エラーが発生しうる関数を扱う際にはこちらの利用を強くお勧めします。


まとめ

VBAでワークシート関数を使う際のポイントは以下の通りです。

  • 基本: WorksheetFunction.関数名(引数)の形で呼び出す。
  • エラーの可能性がない関数 (SUM, MAXなど): WorksheetFunctionをそのまま使って問題ない。
  • エラーの可能性がある関数 (VLOOKUP, MATCHなど):
    • Application.関数名(引数)の形で呼び出し、
    • 戻り値を**IsError関数で判定する**のが最も安全で推奨される。

ワークシート関数の強力な計算能力をVBAに取り入れることで、複雑なロジックを自分で組む必要がなくなり、コードを大幅に簡潔にすることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次