Excel VBA クラス Property Letプロシージャ(Lv.7)

Excel VBA クラスのProperty Letプロシージャについて

「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プロシージャ内のローカル変数が保持されます。
nameProperty Letプロシージャの名前(プロパティ名)を指定します。
valueプロパティに割り当てる値を格納する変数名の指定です。
As typevalue のデータ型を指定します。対応する 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 から戻り値を取得してメッセージボックスで表示します。

【実行結果】

Property Letのテストコード実行結果

オブジェクトブラウザーで確認

オブジェクトブラウザーを開いて確認してみます。

オブジェクトブラウザーを開いて確認

「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 Letプロシージャを使うと、プロパティ値を設定することができます。

・Property Letプロシージャは、値を返さないので単独では使用できません。

・値を返す場合は、Property Getプロシージャを組み合わせて使います。

【Property Letプロシージャの基本的な書き方】

Property Let プロシージャ名(引数リスト As データ型)
  ’プロパティに値を設定する処理(プロパティ名=プロシージャ名)
End Property


Property Letプロシージャのメリットは、プロパティ値を設定する際に任意の処理を実行できることです。

次は「Property Setプロシージャ」です。引き続きご覧いただければ幸いです。

[https://www.kurumico.com/excel-vba-class8/12287/]

Excel VBA クラスについての記事一覧

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

過去記事のサンプルファイルをダウンロードできます

この記事のサンプル登録はありません。記事内のコードをご利用ください。

過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次