【Excel VBA】エクセル関数をVBAで使いたい(WorksheetFunction)

普段Excelで使っている関数をVBAで使いたいといったことがあります。すべての関数が使えるわけではありませんが、VBAでエクセル関数を使うことができます。

この記事では、VBAでエクセル関数を使うことができるApplcation.WorksheetFunction(ワークシートファンクション)についてご紹介します。

WorksheetFunctionの使い方

Application.WorksheetFunction.関数名(関数の引数)と入力することで使うことができます。

Applicationの部分は、省略することができ、WorksheetFunctionだけでもOKです。

WorksheetFunctionのSum関数実行例

わかりやすく、SUM関数を使ったコードを紹介します。

Sub ワークシートファンクション()
    Cells(2, 3) = WorksheetFunction.Sum(Range("C4:C8"))
End Sub

■実行前後

関数を使う場合、必ずと言っていいほどセル範囲等を指定する必要があります。セル範囲はRangeを使って指定しますが、色々な指定方法があります。間違えるとエラーが発生しますので、ご注意ください。

近いうちRangeについて詳しい記事を書きたいと思います。

WorksheetFunctionで使えない関数がある

冒頭でも少し説明しましたが、WorksheetFunctionはほとんどの関数が使えますが使えない関数があります。VBAで使えないワークシート関数を一部紹介します。

使えない関数

  • 文字列操作に関する関数:Left、Mid、Right、Lenなど
  • 日付や時刻に関する関数:Year、Month、Day、Nowなど

VBAで同じ関数があるため、不要ということかと思います。

使える関数を確認する方法

コード入力画面で、WorksheetFunction.と「.(ピリオド)」を入力した時点で候補が次のように表示されます。

WorksheetFunctionの使用例

ワークシート関数を使った具体的な使用例についてご紹介します。私がVBAでよく使うワークシート関数は、VLOOKUP関数やMATCH関数、INDEX関数ですね。

Sub ワークシートファンクション2()
    Dim StaffName As String
    Dim StaffNo As Long
    Dim BirthDay As Date

    Dim WF As Object
    Set WF = WorksheetFunction
    
    StaffName = "鈴木 一郎"
    StaffNo = WF.Match(StaffName, Range("TBL従業員[氏名]"), 0)
    BirthDay = WF.Index(Range("TBL従業員[生年月日]"), StaffNo)
    MsgBox StaffName & "さんの誕生日は、" & BirthDay & "です。"
End Sub

従業員のテーブルがあり、誕生日を表示するコードになります。MATCH関数、INDEX関数で氏名から誕生日を求めることができます。

WorksheetFunctionは長い!ワークシート関数を短くして使う方法

WorksheetFunctionって長いですよね?何度も使う場合は、面倒ですし、コードも読みにくくなります。

上記のコードを見て、お気づきの方がいるかと思いますが、WFというオブジェクトを宣言し、

Set WF = WorksheetFunction

と、セットすることで、以降は、WF.関数名でワークシート関数が簡単に使えるようになります。

ただデメリットもあり、WFの後のピリオド(.)を入力してもワークシート関数の候補が表示されなくなります。

コメント

タイトルとURLをコピーしました