Excel VBAのクラスを学ぶ前の準備 - モジュールとプロパティ -
はじめに
少し前に、「VBAにおけるPropertyプロシージャとは何か」という記事を書きました。(現在受講中のVBAの講座内容です)
今回は、その続きで、モジュール、プロパティについて調べていきます。
◆目次◆
モジュール
モジュールの種類
- 標準モジュール
- オブジェクトモジュール
- シートモジュール
- ブックモジュール
- フォームモジュール
- クラスモジュール
大きく分けると、「標準モジュール」か、「オブジェクトモジュール」か、ということになります。
標準モジュール
標準モジュールで記述したパブリックメンバーはすべてグローバルのメンバーです。 ※グローバルなメンバー→全体的なメンバー、つまりどのオブジェクトの処理も可能
モジュールを分けてコードを管理する大きなメリットは以下2点です。
- 可動性が上がる(コードの管理がしやすい)
- 誤記防止の効果が高い
オブジェクトモジュール
オブジェクトモジュールで記述したパブリックメンバーはオブジェクトに属します。
※ほかのオブジェクトの操作もできるけど、「コードの管理」という観点から外れるので、すべきではないです。
プロパティ
オブジェクトにプロパティを追加する方法
- モジュールレベル変数
- Property Let/Setプロシージャ
- Property Getプロシージャ
セッターとゲッター
- セッター(setter)= 値をsetする(Property Let/Setプロシージャを使う)
- ゲッター(getter)= getした値を返す(Property Getプロシージャを使う)
セッター
オブジェクトモジュールに書いたプライベート変数をパブリックプロパティで値を設定すると、ほかのモジュールでもその値が使えます。
例として、好きなもの(Favorite)を設定するプロパティを作成し、セッターの役割を与えます。
[Sheet1] ' プライベート変数:favorite_ Private favorite_ As String ' パブリックプロパティ:Favorite Public Property Let Favorite(ByVal newFavorite As String) favorite_ = newFavorite End Property [Module1] Sub setter_test() Sheet1.Favorite = "Coffee" End Sub
セッターの使いどころは以下のとおりです。
- モジュールの設定に制限をかけたい
- 設定時に何らかの処理をしたい
なお、[Module1]のコードに
Debug.Print Sheet1.Favorite
を追加すると、エラーが出ます。
[Module1] Sub setter_test() Sheet1.Favorite = "Coffee" Debug.Print Sheet1.Favorite End Sub
実行結果
理由は、Property Getプロシージャを使って値を返していない(戻り値がない)からです。(Debug.Printは、getした値(戻り値)を出力する)
ゲッター
オブジェクトモジュールに書いたプライベート変数をパブリックプロパティで値を取得すると、ほかのモジュールにその値が返せます。
例として、好きなもの(Favorite)の値に「Coffee」を含む文字列が設定されていたら、コーヒーの種類を返すプロパティ(CoffeeKinds)を作成し、ゲッターの役割を与えます。
今回は、好きなもの(Favorite)の値に「AmericanCoffee」を設定します。
[Sheet1] ' プライベート変数:favorite_ Private favorite_ As String ' パブリックプロパティ:Favorite Public Property Let Favorite(ByVal newFavorite As String) favorite_ = newFavorite End Property ' パブリックプロパティ:CoffeeKinds Public Property Get CoffeeKinds() As String If Right(favorite_, 6) = "Coffee" Then CoffeeKinds = Left(favorite_, Len(favorite_) - 6) End If End Property [Module1] Sub getter_test() Sheet1.Favorite = "AmericanCoffee" Debug.Print Sheet1.CoffeeKinds '出力結果:American End Sub
ゲッターの使いどころは以下のとおりです。
- 取得時に何らかの処理をしたい
- 読み取り専用プロパティを作りたい
注意点
同名のProperty Let/SetプロシージャとProperty Getプロシージャがある場合は、読み書き可能なプロパティとして処理します。
さいごに
これらの内容をふまえたうえで、次回の講座ではクラスを勉強します。