Option Explicit
<font color="green">'---------------------------------------------</font>
<font color="green">'データ</font>
<font color="green">'---------------------------------------------</font>
<font color="green">'ユーザー定義型</font>
Private Type typSumAvg
<font color="green"> '合計</font>
mlngSum As Long
<font color="green"> 'データ数</font>
mlngNums As Long
<font color="green"> '平均</font>
mlngAvg As Long
End Type
<font color="green">'サンプルプログラム04</font>
Sub calc4()
<font color="green"> '---------------------------------------------</font>
<font color="green"> 'データ</font>
<font color="green"> '---------------------------------------------</font>
<font color="green"> 'ユーザー定義型の配列</font>
Dim audtSumAvg(2) As typSumAvg
<font color="green"> '---------------------------------------------</font>
<font color="green"> '手続き</font>
<font color="green"> '---------------------------------------------</font>
<font color="green"> '合計とデータ数の初期化(1)</font>
Call dataCrear(audtSumAvg(0))
<font color="green"> 'データの追加とデータ数の計算(1)</font>
Call dataAdd(audtSumAvg(0), 10)
<font color="green"> '合計とデータ数の初期化(2)</font>
Call dataCrear(audtSumAvg(1))
<font color="green"> 'データの追加とデータ数の計算(2)</font>
Call dataAdd(audtSumAvg(1),100)
<font color="green"> '合計とデータ数の初期化(3)</font>
Call dataCrear(audtSumAvg(2))
<font color="green"> 'データの追加とデータ数の計算(3)</font>
Call dataAdd(audtSumAvg(2),1000)
<font color="green"> 'データの追加とデータ数の計算(1)</font>
Call dataAdd(audtSumAvg(0), 20)
<font color="green"> 'データの追加とデータ数の計算(2)</font>
Call dataAdd(audtSumAvg(1), 200)
<font color="green"> 'データの追加とデータ数の計算(3)</font>
Call dataAdd(audtSumAvg(2), 2000)
<font color="green"> 'データの追加とデータ数の計算(1)</font>
Call dataAdd(audtSumAvg(0), 30)
<font color="green"> '平均の計算(1)</font>
audtSumAvg(0).mlngAvg = getAvg(audtSumAvg(0))
<font color="green"> 'データの追加とデータ数の計算(2)</font>
Call dataAdd(audtSumAvg(1), 300)
<font color="green"> '平均の計算(2)</font>
audtSumAvg(1).mlngAvg = getAvg(audtSumAvg(1))
<font color="green"> 'データの追加とデータ数の計算(3)</font>
Call dataAdd(audtSumAvg(2), 300)
<font color="green"> '平均の計算(3)</font>
audtSumAvg(2).mlngAvg = getAvg(audtSumAvg(2))
<font color="green"> '結果の出力</font>
Debug.Print "1:Sum=" & CStr(audtSumAvg(0).mlngSum) & _
":Avg=" & CStr(audtSumAvg(0).mlngAvg)
Debug.Print "2:Sum=" & CStr(audtSumAvg(1).mlngSum) & _
":Avg=" & CStr(audtSumAvg(1).mlngAvg)
Debug.Print "3:Sum=" & CStr(audtSumAvg(2).mlngSum) & _
":Avg=" & CStr(audtSumAvg(2).mlngAvg)
End Sub
<font color="green">'データの初期化処理</font>
Sub dataClear(pudtSumAvg As typSumAvg)
<font color="green"> '---------------------------------------------</font>
<font color="green"> '手続き</font>
<font color="green"> '---------------------------------------------</font>
<font color="green"> '合計とデータ数の初期化</font>
pudtSumAvg.mlngSum = 0
pudtSumAvg.mlngNums = 0
End Sub
<font color="green">'データの追加とデータ数の計算処理</font>
Sub dataAdd(pudtSumAvg As typSumAvg, plngValue As Long)
<font color="green"> '---------------------------------------------</font>
<font color="green"> '手続き</font>
<font color="green"> '---------------------------------------------</font>
<font color="green"> 'データの追加とデータ数の計算</font>
pudtSumAvg.mlngSum = pudtSumAvg.mlngSum + plngValue
pudtSumAvg.mlngNums = pudtSumAvg.mlngNums + 1
End Sub
<font color="green">'平均の計算処理</font>
Function getAvg(pudtSumAvg As typSumAvg) As Long
<font color="green"> '---------------------------------------------</font>
<font color="green"> '手続き</font>
<font color="green"> '---------------------------------------------</font>
<font color="green"> '平均値の計算</font>
getAvg = pudtSumAvg.mlngSum / pudtSumAvg.mlngNums
End Sub