VBA と Java のオブジェクト指向プログラミング - VBAOBJECT0106
Top > VBA のオブジェクト指向プログラミング > 入門編
第5回 第6回 第7回

第6回:手続きをまとめる

前回のサンプルプログラムではデータをまとめる方法を考えましたが今回
は手続きをまとめる方法を考えます。手続きのまとめ方を考えるときには、
データをどうやって渡すかということも考える必要があります。

前回のサンプルプログラムでは、データの初期化、データの追加とデータ
数の計算、平均の計算を、何度も繰り返し実行しています。
これらをそれぞれ専用の役割を持った手続きで実行するようにしてみまし
ょう。

標準モジュール:mod4
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

第5回 第6回 第7回
Top > VBA のオブジェクト指向プログラミング > 入門編