Top > VBA のオブジェクト指向プログラミング > 入門編
第7回 第8回 第9回
第7回 第8回 第9回
Top > VBA のオブジェクト指向プログラミング > 入門編
第7回 第8回 第9回
前回のサンプルプログラムには、合計と平均を求めている最中のデー
タを、外部から自由に変更できてしまうという問題がありました。
データを取得して合計や平均を求める処理を呼び出すプロシージャと、
実際にデータのクリア、データの追加とデータ数の計算、平均の計算を
行うプロシージャを別々の標準モジュールに作成して、処理途中のデー
タをデータのクリア、データの追加とデータ数の計算、平均の計算を行
うプロシージャが存在する標準モジュールの中でだけ使うようにして、
外部から変更できないようにしておけば、外部から処理途中のデータを
変更できなくなります。
データを必要な処理以外から変更できないようにすることを、「データ
をカプセル化する」といいます。前回のサンプルプログラムをデータの
カプセル化を行うように修正したプログラムは以下のようになります。
タを、外部から自由に変更できてしまうという問題がありました。
データを取得して合計や平均を求める処理を呼び出すプロシージャと、
実際にデータのクリア、データの追加とデータ数の計算、平均の計算を
行うプロシージャを別々の標準モジュールに作成して、処理途中のデー
タをデータのクリア、データの追加とデータ数の計算、平均の計算を行
うプロシージャが存在する標準モジュールの中でだけ使うようにして、
外部から変更できないようにしておけば、外部から処理途中のデータを
変更できなくなります。
データを必要な処理以外から変更できないようにすることを、「データ
をカプセル化する」といいます。前回のサンプルプログラムをデータの
カプセル化を行うように修正したプログラムは以下のようになります。
Option Explicit
<font color="green">'サンプルプログラム06</font>
Sub calc6()
<font color="green"> '合計値</font>
Dim lngSum As Long
<font color="green"> '平均値</font>
Dim lngAvg As Long
<font color="green"> '合計値とデータ個数の初期化</font>
Call modSumAvg6.dataCrear()
<font color="green"> 'データの追加とデータ個数の計算</font>
Call modSumAvg6.dataAdd(10)
<font color="green"> 'データの追加とデータ個数の計算</font>
Call modSumAvg6.dataAdd(20)
<font color="green">'#############################################</font>
<font color="green">'### 処理中のデータを変更したくても</font>
<font color="green">'### 変数を使えないので変更できない</font>
<font color="green">'#############################################</font>
<font color="green"> 'データの追加とデータ個数の計算</font>
Call modSumAvg6.dataAdd(30)
<font color="green"> '合計値の取得</font>
lngSum = modSumAvg6.getSum()
<font color="green"> '平均値の計算</font>
lngAvg = modSumAvg6.getAvg()
<font color="green"> '結果の出力</font>
Debug.Print "Sum=" & CStr(lngSum) & _
":Avg=" & CStr(lngAvg)
End Sub
<font color="green">'#############################################</font>
<font color="green">'### この標準モジュールには、</font>
<font color="green">'### 合計と平均を求めるための</font>
<font color="green">'### プロシージャだけを記述する</font>
<font color="green">'#############################################</font>
Option Explicit
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">'#############################################</font>
<font color="green">'### モジュール宣言部で変数を Private で宣言すると</font>
<font color="green">'### 標準モジュールの外部から使えない変数になる</font>
Private mudtSumAvg As typSumAvg
<font color="green">'#############################################</font>
<font color="green">'データの初期化処理</font>
<font color="green">'モジュールレベル変数 mudtSumAvg を使うので</font>
<font color="green">'ユーザー定義型の引数は不要</font>
Public Sub dataClear()
<font color="green"> '合計値とデータ個数の初期化</font>
mudtSumAvg.mlngSum = 0
mudtSumAvg.mlngNums = 0
End Sub
<font color="green">'データの追加とデータ数の計算処理</font>
<font color="green">'モジュールレベル変数 mudtSumAvg を使うので</font>
<font color="green">'ユーザー定義型の引数は不要</font>
Sub dataAdd(plngValue As Long)
<font color="green"> 'データの追加とデータ個数の計算</font>
mudtSumAvg.mlngSum = _
mudtSumAvg.mlngSum + plngValue
mudtSumAvg.mlngNums = _
mudtSumAvg.mlngNums + 1
End Sub
<font color="green">'合計の取得処理</font>
<font color="green">'処理途中のデータを標準モジュール modSumAvg6</font>
<font color="green">'に移動したので新たに追加</font>
Function getSum() As Long
<font color="green"> '合計の取得</font>
getSum = mudtSumAvg.mlngSum
End Sub
<font color="green">'平均の計算処理</font>
<font color="green">'モジュールレベル変数 mudtSumAvg を使うので</font>
<font color="green">'ユーザー定義型の引数は不要</font>
Function getAvg() As Long
<font color="green"> '平均の計算</font>
getAvg = _
mudtSumAvg.mlngSum / mudtSumAvg.mlngNums
End Sub
第7回 第8回 第9回
Top > VBA のオブジェクト指向プログラミング > 入門編
このページへのコメント
dapVKl Hey, thanks for the blog article.Thanks Again.
VBAOBJECT0108 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 篋堺≪ http://www.pslcbi.com/moncler2014.html
3GxMPL <a href="http://qakjykpofapn.com/">qakjykpofapn</a>, [url=http://jyofqznstabm.com/]jyofqznstabm[/url], [link=http://sqrdooiegwkn.com/]sqrdooiegwkn[/link], http://hdmfzidzouri.com/
障腦吟潟<潟紊援ぜ障 若若若若 http://www.fetang.com/