#777 ExcelのSum関数やAverage関数を利用して計算を行う方法 VBA

Access VBAからExcelを呼び出すことで、AccessにはないSum関数やAverage関数といったExcel特有のワークシート関数を利用することができます。

それには、『Excel.Application』のオブジェクト変数を生成し、その変数のメソッドとして「.Sum」のように先頭に「.(ドット)」を付けて各関数を呼び出します。
Excelのワークシートではそれらの関数の引数には”セル範囲”を指定しますが、Access VBAから呼び出す場合は所定の数値を”カンマ区切りで列挙”する形で指定します。また数値を直接列挙するだけでなく、各値の代入された”配列”を渡すことで返り値を取得することもできます。

次の例では引数に、1.値を列挙して直接指定、2.Array関数で複数値を代入した配列を指定、3.要素を1つずつ代入した配列を指定の3通りのパターンでExcelの関数を呼び出しています。

Dim xls As Object
Dim varArray As Variant
Dim intArray() As Integer
Dim iintLoop As Integer

'Excelオブジェクトを生成
Set xls = CreateObject("Excel.Application")

'引数に値を列挙して直接指定
Debug.Print "合計:" & xls.Sum(1, 2, 3, 4, 5)
Debug.Print "平均:" & xls.Average(1, 2, 3, 4, 5)

Debug.Print "合計:" & xls.Sum(15, 25, 55, 85, 105)
Debug.Print "平均:" & xls.Average(15, 25, 55, 85, 105)

'引数に配列を指定
varArray = Array(10, 20, 30, 40, 50, 60, 70, 80, 90)
Debug.Print "合計:" & xls.Sum(varArray)
Debug.Print "平均:" & xls.Average(varArray)

'引数に下限〜上限を宣言した配列を指定
ReDim intArray(1 To 48)
For iintLoop = 1 To 48
  intArray(iintLoop) = iintLoop
Next iintLoop
Debug.Print "合計:" & xls.Sum(intArray())
Debug.Print "平均:" & xls.Average(intArray())

'(参考)Withステートメントを使って記述する場合
With xls
  Debug.Print "合計:" & .Sum(1, 2, 3, 4, 5)
  Debug.Print "平均:" & .Average(1, 2, 3, 4, 5)
End With

Set xls = Nothing

実行例:


【補足】
上記のプログラム例ではプロシージャが実行される都度Excelオブジェクトを生成していますが、VBEのメニューバーの[ツール]-[参照設定]で『Microsoft Excel 16.0 Object Library』などにチェックマークを付けて参照設定しておくことで、次のように書くこともできます(「CreateObject("Excel.Application")」の命令は不要となります)。

'関数ごとにExcel.Applicationを記述する場合
Debug.Print "合計:" & Excel.Application.Sum(1, 2, 3, 4, 5)
Debug.Print "平均:" & Excel.Application.Average(1, 2, 3, 4, 5)

'Withステートメントを使って記述する場合
varArray = Array(10, 20, 30, 40, 50, 60, 70, 80, 90)
With Excel.Application
  Debug.Print "合計:" & .Sum(varArray)
  Debug.Print "平均:" & .Average(varArray)
End With


※この場合、次のように「Excel.Application」をオブジェクト変数として宣言しておくことでコードがシンプルになりますが、上記のように「Excel.Application.Sum()」をその都度記述した方が処理の起動は速いです。

Dim xls As New Excel.Application
Debug.Print xls.Sum(1, 2, 3, 4, 5)

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved