サイトについて      連絡先   検索

VBA エクセルの関数を使う WorksheetFunction

はじめに

Excel VBA でエクセルの関数を使う WorksheetFunction を紹介します。

エクセルの Sum や Count などの関数を使用できます。

VBA の標準の関数にない機能を使えるようになります。

エクセルの関数を使う

WorksheetFunction.エクセルの関数名()のようにして使用できます。

SUM 関数」を使って、セルの範囲「A1」~「B2」の合計を取得するには次のように指定します。


Dim l As Long
l = WorksheetFunction.Sum(Range("A1:B2"))
Debug.Print (l) ' 合計値

すべての関数を使用できるわけではありません。Int や Len など、一部の関数は使用できません。VBA に同様の関数が存在しているものはないようです。

値の指定の仕方

1 つの値を渡す

数値や文字列など 1 つの値を引数に取る関数は次のように指定できます。セルを指定するだけで自動でその値を渡せます。実際にエクセルでその関数を使用するときと同じ使い方ができます。


Dim d As Double
d = WorksheetFunction.Round(Range("A1"), 0)       ' セル「A1」
d = WorksheetFunction.Round(Range("A1").Value, 0) ' .Value とする必要はない
d = WorksheetFunction.Round(Cells(1, 2), 0)       ' 1 行目、2 列目のセル「B1」
d = WorksheetFunction.Round(10.5, 0)              ' 数値

複数の値を渡す

複数の値 (セルの範囲など) を引数にとる関数は次のように指定できます。Range でセルの範囲を指定したり、カンマで数値を指定したり、配列も渡せます。


Dim l As Long
l = WorksheetFunction.Sum(Range("A1:B2"))    ' セル「A1」~「B2」の範囲
l = WorksheetFunction.Sum(Range("A1", "B2")) ' セル「A1」~「B2」の範囲
l = WorksheetFunction.Sum(10, 20, 30)        ' 複数の数値

Dim a(2) As Integer
a(0) = 10
a(1) = 30
a(2) = 20
l = WorksheetFunction.Sum(a)                 ' 配列
l = WorksheetFunction.Sum(Range("A1:B2"), 10, 20, a) ' カンマで組み合わせられます。

不正な引数はエラー

その関数が受け取れない引数を渡すとエラー「アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。エクセルで実際に使用したときに「#VALUE!」のように、セルにエラーが表示されるような渡し方はすべてエラーが発生します。


Dim l As Long
l = WorksheetFunction.Sum("Tips") ' エラー

関連ページ