「Excel VBAのクラス」について第7回目は、クラスで使うProperty Letプロシージャについてです。
前回 Property Getプロシージャの単独での使い方について確認しました。
今回は Property Letプロシージャについて勉強しましょう (^^)
Property Let は「プロパティの値を設定する」でしたね。
よろしくお願いしますm(_ _)m
はじめに
今回は「Property Letプロシージャ」を取り上げます。
はじめに3つの「Propertyプロシージャ」を再度確認しておきましょう。
プロシージャ | 説明 |
---|---|
Property Get | プロパティの値を返すプロシージャ |
Property Let | プロパティの値を設定するプロシージャ |
Property Set | オブジェクトに対する参照を設定するプロシージャ |
Property Letプロシージャは、値を返すことはできませんので単独では使用できません。値を返す場合は、Property Getプロシージャを組み合わせて使います。
【この記事でわかることは】
・Property Let プロシージャの使い方
Property Letプロシージャとは
Property Letプロシージャは、プロパティに値を設定するためのメソッドです。
Property Letステートメントの構文
Property Letプロシージャは、Property Letステートメントで始まり、Property Endステートメントまでの間で構成されます。
Property Letステートメントの構文は次のとおりです。
構文
[Public|Private|Friend][Static] Property Let name(value As type[,arglist])
※ []で囲んだものは省略可能です。[Public|Private|Friend]の指定省略なら既定のPublicです。
Property Letプロシージャの構文を簡単に示すとこんな感じです。
Property Let プロシージャ名(引数リスト As データ型)
’プロパティに値を設定する処理(プロパティ名=プロシージャ名)
End Property
解説
指定項目 | 説明 |
---|---|
[Public] | すべてのモジュールのすべてのプロシージャから参照できます。 |
[Private] | 宣言したモジュール内でのみ参照できます。 |
[Friend] | クラスモジュールでのみ使用でき、プロジェクト全体から参照できます。 ただし、インスタンスのコントロールからは参照できません。 |
[Static] | Property Letプロシージャ内のローカル変数が保持されます。 |
name | Property Letプロシージャの名前(プロパティ名)を指定します。 |
value | プロパティに割り当てる値を格納する変数名の指定です。 |
As type | value のデータ型を指定します。対応する Property Getプロシージャ の戻り値の型と同じにする必要があります。 |
[,arglist] | 引数 value が複数の場合に追加設定するリストを指定します。 |
arglist 引数の構文と指定項目
arglist の構文
[Optional] [ByVal|ByRef] [ParamArray] varname [( )] [As type] [=defaultvalue]
※ []で囲んだものは省略可能です。
arglist の指定項目
パーツ | 説明 |
---|---|
[Optional] | 引数が必須でないことを示します。 |
[ByVal] | 値渡しで引数が渡されることを示します。 |
[ByRef] | 参照渡しで引数が渡されることを示します。既定は ByRef です。 |
[ParamArray] | 最後の引数としてのみ使用できます。 Variant 要素の省略可能(Optional)な配列であることを示します。 ParamArrayキーワードを使用すると、任意の数の引数を指定できます。 ByVal、ByRef、または Optional と併用することはできません。 |
varname | 引数を表す変数の名前です。 |
[As type] | varname のデータ型です。 |
[defaultvalue] | 任意の定数または定数式です。 Optional のパラメーターにのみ有効です。 Object 型の場合、明示的な既定値は Nothing のみ有効です。 |
Property Letプロシージャの使用例
VBAのクラスモジュールでProperty Letプロシージャを使うと、プロパティに値を設定することができます。
ただし、Property Letプロシージャは、単独で使うことはできません。プロパティに設定した値を取得するためには、Property Getプロシージャが必要です。
Property Let プロシージャと Property Get プロシージャは、同じプロパティ名で定義する必要があります。例えば、以下のように書きます。
'クラス内の変数はPrivateで設定
Private sName As String
Private iAge As Integer
'Nameプロパティの値を設定する
Public Property Let Name(Value As String)
sName = Value
End Property
'Nameプロパティの値を返す
Public Property Get Name() As String
Name = sName
End Property
'Ageプロパティの値を設定する
Public Property Let Age(Value As Integer)
iAge = Value
End Property
'Ageプロパティの値を返す
Public Property Get Age() As Integer
Age = iAge
End Property
標準モジュールのコードがこちらです。
Sub LetTest()
Dim Pet As Class1 'クラスを入れる変数
Set Pet = New Class1 'クラスをインスタンス化
Pet.Name = "くるみ(犬)" 'Property Let Nameを呼び出す
Pet.Age = 12 'Property Let Ageを呼び出す
MsgBox Pet.Name & Pet.Age & "歳" 'Property Getで取得
End Sub
【クラスモジュールのコード解説】
・2~3行目、クラス内で使用する変数を Privateで定義しています。
・5~7行目、Nameプロパティの値を設定ための Property Letプロシージャです。
・6行目、Property Letで設定した値を、変数 sNameに代入してします。
・9~11行目、Nameプロパティの値を返すための Property Getプロシージャです。
・10行目、Nameプロパティに Property Letで設定した変数 sNameの値を代入してします。
※12行目以降のAgeプロパティの部分については、同様の内容なので解説は省略します。
【標準モジュールのコード解説】
・2~3行目で変数「Pet」にクラスをインスタンス化しています。
次のように1行で書くこともできます。
Dim Pet As New Class1 ‘インスタンス化を1行で書く
・4~5行目で、Property Let で各プロパティに値を設定します。
・6行目で、Property Get から戻り値を取得してメッセージボックスで表示します。
【実行結果】
オブジェクトブラウザーで確認
オブジェクトブラウザーを開いて確認してみます。
「Age」と「Name」は Property Let と Property Get 共通の名前なのでひとつになっていることが確認できます。プロパティは Pablic です。
クラス内で使用する変数「iAge」と「sName」は Private変数で設定されています。
Property Letプロシージャを使うメリット
Property Letプロシージャを使うメリットは、プロパティに値を設定する際に、任意の処理を実行できることです。例えば、次のようなコードです。
Private sName As String
Public Property Let Name(Value As String)
If Value = "" Then
MsgBox "名前を入力してください。"
Exit Property 'プロシージャを抜ける
End If
'sNameに値が入っている場合なにもせず終了
If sName <> "" Then
MsgBox "sNameは上書きできません"
Else
sName = Value '値を代入
End If
End Property
このコードでは、3行目で引数の Value が空文字列かチェックしています。もし空文字列なら、メッセージボックスを表示して Exit Propertyステートメントで処理を中止します。
もう一つは、8行目で sName をチェックしています。もし値が入っている場合には(ここでは Exit Property は使わずに)何もせず終了します。
このように、Property Letプロシージャを使うことで、プロパティ値を設定する前に、値の妥当性やエラーチェックしたり、他の処理を入れたりすることができます。
まとめ(おわりに)
以上、Excel VBAでクラスで Property Letプロシージャを使う方法でした。
クラスの7回目でした。
クラスで使うProperty Letプロシージャについては理解できましたか?
Property Getプロシージャが必要なことを忘れないでくださいね(^^)
名前を同じにしなければいけなかったり
変数を用意しなければいけなかったり
なんだか混乱しています(^^;)
次回はProperty Setプロシージャについて勉強しましょう(^^)/
これも Property Getと組み合わせて使うので良く復習しておいてね。
わかりました。自分でコードを変更してみたり
いろいろ触って見て覚えるようにします。
次回もよろしくお願いしますm(_ _)m
まとめと感想など
以上、Property Letプロシージャの使い方で覚えておいてほしい大事なことはこちらです。
次は「Property Setプロシージャ」です。引き続きご覧いただければ幸いです。
Excel VBA クラスについての記事一覧
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
過去記事のサンプルファイルをダウンロードできます
この記事のサンプル登録はありません。記事内のコードをご利用ください。
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください