本ページには広告が含まれています。

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

Excel VBA クラスのProperty Letプロシージャについて
画像はCanva「Text to Image」で生成しました

「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プロシージャ」です。引き続きご覧いただければ幸いです。

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

Excel VBA クラスの作成・使い方について(Lv.1)
Excel VBA クラスのプロパティ設定について(Lv.2)
Excel VBA クラスにメソッドを設定する方法(Lv.3)
Excel VBA クラスをインスタンス化する方法(Lv.4)
Excel VBA クラス Propertyプロシージャ(Lv.5)
Excel VBA クラス Property Getプロシージャ(Lv.6)
Excel VBA クラス Property Letプロシージャ(Lv.7)
Excel VBA クラス Property Setプロシージャ(Lv.8)
Excel VBA シートの表データからクラスを作成 (Lv.9)
Excel VBA クラス インスタンスをコレクション化(Lv.10)
Excel VBA クラス コンストラクタとデストラクタ(Lv.11)
Excel VBA クラス コンストラクタを利用する方法(Lv.12)
Excel VBA クラス コレクションの要素取得方法(Lv.13)
Excel VBA クラス コレクション要素の追加と削除(Lv.14)
Excel VBA クラス コレクションの内容を書き出す(Lv.15)
Excel VBA クラス UserFormで機能を操作する(Lv.16)
Excel VBA クラス コレクションの最大要素数について(Lv.17)

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

スポンサーリンク
スポンサーリンク

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

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

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