普段エクセルで使っている関数をVBAで使いたいことがあります。
すべての関数が使えるわけではありませんが、VBAでエクセル関数を使うことができます。
この記事では、VBAでエクセル関数を使うことができるApplcation.WorksheetFunction(ワークシートファンクション)の使い方についてご紹介します。
WorksheetFunction(ワークシートファンクション)の使い方
Application.WorksheetFunction.関数名(関数の引数)と入力することで、VBAでもエクセル関数使うことができます。
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で関数が簡単に使えるようになります。
まとめ
この記事では、VBAでエクセル関数を使うことができるWorksheetFunctionについてご紹介しました。
同じ機能をプログラムして考えるより、既存のエクセル関数を使った方が早いケースが多いと思いますので、ぜひWorksheetFunctionを活用してみて下さい。
コメント