#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) |
|||
|
Copyright © T'sWare All rights reserved |