第140回.Property {Get|Let|Set} ステートメント
VBAでは、カスタム プロパティの作成と操作ができます。
クラス モジュール、フォーム、標準モジュール、これらにカスタム プロパティを作成することができます。
プロパティを作成するには、Property {Get|Let|Set} ステートメントを使用します。
SubやFunctionと同じようにPropertyプロシージャと呼びます。
Propertyプロシージャは、プロシージャを含むモジュールのプロパティになります。
そもそもプロパティとは
propertyは、財産・資産・性質・属性と訳されます。
オブジェクトの持つ属性を表すデータになります。
プロパティは、値の取得と、値の設定、この二つの機能があります。
VBAでプロパティを作成するステートメント
Property Get
取得とは、クラスを使う側(例えばオブジェクトを使う標準モジュールのプロシージャ)から見て取得ということです。
変数 = Range("A1").Value
このValueプロパティがGetです。
Property Let
設定とは、クラスを使う側(例えばオブジェクトを使う標準モジュールのプロシージャ)から見て設定ということです。
Range("A1").Value = 100
このValueプロパティがLetです。
Property Set
オブジェクトの場合は、Letではなく、Setになります。
ただし、オブジェクトを扱う場合でも、Letを使用しても問題なく動作します。
Property SetはProperty Letでも同じ
通常は、GetとLetまたはGetとSetを同一名にしてペアで作成します。
つまり、値の設定と取得を同じプロパティ名にすることで使いやすくできるという事です。
RangeのValueプロパティには、GetとSetがあるので、設定と取得が同じValueで使えています。
読み取り専用プロパティ
RangeのAddressプロパティは設定できません。
つまりGetのみの読み取り専用プロパティということです。
読み取り専用プロパティなので、値を設定することはできません。
書き込み専用プロパティ
書き込み専用のプロパティなので、値を代入(=代入式の左辺に)することはできません。
書き込み専用プロパティを作成することはできますが、実際に使われることは滅多にありません。
Property {Get|Let|Set} ステートメントの構文
Property Get
[ statements ]
[ name = expression ]
[ Exit Property ]
[ statements ]
[ name = expression ]
End Property
Property Let
[ statements ]
[ Exit Property ]
[ statements ]
End Property
Property Set
[ statements ]
[ Exit Property ]
[ statements ]
End Property
構文 | 説明 |
Public | 省略可能。 このPropertyプロシージャは、すべてのモジュールにある他のすべてのプロシージャからアクセスできることを示します。 Option Privateステートメントを含むモジュールで使用されている場合、このプロシージャはプロジェクトの外部では使用できなくなります。 |
Private | 省略可能。 このPropertyプロシージャは、このプロシージャが宣言されたモジュール内にある他のプロシージャからのみアクセスできることを示します。 |
Friend | 省略可能。 クラス モジュール内でのみ使用します。 このPropertyプロシージャは、プロジェクト全体で参照可能ですが、オブジェクトのインスタンスのコントローラーからは参照できません。 |
Static | 省略可能。 このPropertyプロシージャのローカル変数が呼び出し間で保持されることを示します。 このPropertyプロシージャの外側で宣言された変数は、このプロシージャ内で使用されていても、Static属性の影響を受けません。 |
name | 必須です。 このPropertyプロシージャの名前です。 標準の名前付け規則に従ってください。 ただし、同じモジュール内にあるProperty Getプロシージャ、Property Letプロシージャ、Property Setプロシージャは同じ名前にすることができます。 |
arglist | 必須。 このPropertyプロシージャの呼び出し時に渡される引数を表す変数のリストです。 複数の引数は、コンマで区切られます。 |
value | 必須。 プロパティに割り当てる値またはオブジェクト参照を格納している変数です。 プロシージャの呼び出し時に、この引数は呼び出し元の式の右辺に置きます。 valueのデータ型は、対応するProperty Getプロシージャの戻り値の型と同じにする必要があります。 |
reference | 必須。 オブジェクト参照の割り当ての右辺で使用されるオブジェクト参照を格納している変数です |
arglist引数の構文と指定項目
Property {Get|Let|Set} ステートメントの解説と注意点
roperty Set|Let ステートメントでは、引数を少なくとも1つ定義する必要があります。
Staticが使用されていない場合、ローカル変数の値は呼び出し間で保持されません。
Propertyプロシージャは、別のPropertyプロシージャ、Subプロシージャ、Functionプロシージャの内側で定義することはできません。
プログラムの実行は、そのPropertyプロシージャを呼び出したステートメントの次のステートメントから続行されます。
Exit Propertyステートメントは、Propertyプロシージャ内の任意の場所にいくつでも配置できます。
ただし、Friendプロシージャは、プロジェクトに含まれるどのモジュール内のプロシージャからでもアクセスできます。 Friendプロシージャは、その親クラスのタイプ ライブラリには表示されません。
また、Friendプロシージャは、遅延バインディングもできません。
Propertyプロシージャの使用例
シートモジュール:最終行を取得するプロパティ
Property Get LastRow(ByVal argCol As Long) As Long
LastRow = Me.Cells(Me.Rows.Count, argCol).End(xlUp).Row
End Property
シートモジュールで使用します。
シートモジュール内では、自身のシートオブジェクトをMeで参照できます。
シートモジュール:名前を設定/取得します。
Property Get Name2() As String
Me.Name2 = LCase(Me.Name)
End Property
Property Let Name2(ByVal argName As String)
Me.Name = argName
End Property
本来のNmaeプロティとは別にName2プロパティを作成しています。
取得/設定する時に、LCaseで大文字変換しています。
クラスでの使用例は、以下を参照してください。
Propertyプロシージャの実践例
同じテーマ「マクロVBA入門」の記事
第130回.テーブル操作の概要(ListObject)
第131回.テーブル操作のVBAコード(ListObject,DataBodyRange)
第142回.テーブル全件処理とデータ最終行(ListObject,DataBodyRange)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
第133回.引数の数を可変にできるパラメーター配列(ParamArray)
第134回.Errオブジェクトとユーザー定義エラー
第138回.外部ライブラリ(ActiveXオブジェクト)
第140回.Property {Get|Let|Set} ステートメント
第143回.WorksheetFunctionの効率的な使い方とスピル新関数の利用
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。