【Excel VBA】エクセル関数をVBAで使う方法(WorksheetFunction)について解説

普段エクセルで使っている関数をVBAで使いたいことがあります。

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

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

目次

WorksheetFunction(ワークシートファンクション)の使い方

Application.WorksheetFunction.関数名(関数の引数)と入力することで、VBAでもエクセル関数使うことができます。

”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を短くして使う方法

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

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

Set WF = WorksheetFunction

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

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

まとめ

この記事では、VBAでエクセル関数を使うことができるWorksheetFunctionについてご紹介しました。

同じ機能をプログラムして考えるより、既存のエクセル関数を使った方が早いケースが多いと思いますので、ぜひWorksheetFunctionを活用してみて下さい。

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

この記事を書いた人

コメント

コメントする

目次