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

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

はじめに

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

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

VBA の機能を補えるようになります。

  • 目次
    • エクセルの関数を使う
    • 値を渡す

エクセルの関数を使う

WorksheetFunction.エクセルの関数名()のように WorksheetFunction の後ろにエクセルの関数名を入力します。

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


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

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

ROUND 関数」など VBA では苦手な四捨五入や切り捨て、切り上げが簡単にできるので便利です。

値を渡す

1 つの値を渡す

数値や文字列など 1 つの値を引数に取る関数は次のように指定できます。

セルを指定するだけで自動でその値を渡せます。実際にエクセルでその関数を使用するときと同じ使い方ができます。


Dim d As Double
d = WorksheetFunction.Round(Range("A1"), 0)       ' セル「A1」.Value の値が渡される
d = WorksheetFunction.Round(Range("A1").Value, 0) ' セル「A1」の値
d = WorksheetFunction.Round(Cells(1, 2), 0)       ' 1 行目、2 列目のセル「B1」
d = WorksheetFunction.Round(10.5, 0)              ' 数値や文字列など VBA の値も渡せる

複数の値を渡す

複数の値 (セルの範囲など) を引数に取る関数は次のように指定できます。

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) ' カンマで組み合わせられます。

不正な引数はエラー

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


Dim l As Long
l = WorksheetFunction.Sum("Tips") ' エラー
  • 目次
    • エクセルの関数を使う
    • 値を渡す