VBAのPropertyでクラスモジュールのプロパティを定義する方法をわかりやすく解説

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

Propertyの概要

プロパティ定義 VBAの予約語

Property

概要 Property は、VBAのクラスモジュールで変数(フィールド)の値を取得・設定するためのプロパティを定義するために使用されます。

わかりやすく説明 Property は、「クラスの変数を外部から安全に操作できるようにする仕組み」です。直接変数にアクセスせず、適切なチェックや処理を挟んで値をやり取りできます。

  • クラスモジュール内でプロパティを定義する。
  • Property Get で値を取得する。
  • Property Let で値を設定する(文字列や数値用)。
  • Property Set でオブジェクトを設定する。

Property Get を使って値を取得する

Property Get を使って、クラス内の変数を外部から取得する基本的な例です。

' クラスモジュール (Class1)
Private pName As String ' プライベート変数

Public Property Get Name() As String
    Name = pName
End Property

解説:

  • pNamePrivate なので、クラス外から直接アクセスできない。
  • Property Get を定義することで、外部から安全に値を取得できる。

Property Let を使って値を設定する

Property Let を使うと、クラス内の変数に値を代入できます。

' クラスモジュール (Class1)
Private pName As String ' プライベート変数

Public Property Get Name() As String
    Name = pName
End Property

Public Property Let Name(value As String)
    pName = value
End Property

解説:

  • Property Let を使って、外部から変数に値を代入できるようにする。
  • データのバリデーション(入力チェック)を追加することも可能。

Property Set を使ってオブジェクトを設定する

Property Set を使うと、クラスのプロパティにオブジェクトを代入できます。

' クラスモジュール (Class1)
Private pSheet As Worksheet ' ワークシートオブジェクト

Public Property Get Sheet() As Worksheet
    Set Sheet = pSheet
End Property

Public Property Set Sheet(ws As Worksheet)
    Set pSheet = ws
End Property

解説:

  • オブジェクトを代入する場合は Property Set を使用。
  • Set を使ってオブジェクトを適切に参照する。

ExcelでのPropertyの活用例(クラスを使ってセルを管理)

クラスを使って Excel のセルを簡単に管理する例です。

' クラスモジュール (CellManager)
Private pCell As Range

Public Property Get Cell() As Range
    Set Cell = pCell
End Property

Public Property Set Cell(rng As Range)
    Set pCell = rng
End Property

Public Property Get Value() As Variant
    Value = pCell.Value
End Property

Public Property Let Value(val As Variant)
    pCell.Value = val
End Property

解説:

  • セルの範囲をオブジェクトとして管理。
  • セルの値を簡単に取得・設定できる。

エラーを回避する方法

Property を使う際に、適切なエラーハンドリングを追加すると安全に使用できます。

' クラスモジュール (Class1)
Private pNumber As Integer

Public Property Get Number() As Integer
    Number = pNumber
End Property

Public Property Let Number(value As Integer)
    If value < 0 Then
        Err.Raise 9999, "Class1", "負の値は設定できません"
    Else
        pNumber = value
    End If
End Property

解説:

  • Err.Raise を使って不正な値の設定を防ぐ。
  • 入力チェックを追加して、バグを未然に防ぐ。

Propertyの注意事項

  • Property Let は数値や文字列用、Property Set はオブジェクト用: データ型に応じて適切なプロパティを選ぶ。
  • クラスモジュール内でのみ使用可能: 標準モジュールでは Property は使えない。
  • 適切なデータチェックを行う: バリデーションを加えることで、意図しないデータの設定を防げる。

よくある質問

Q: Property Let と Property Set の違いは?
A: Property Let は数値や文字列などの値型を代入し、Property Set はオブジェクトを代入するときに使います。
Q: Property はどのような場面で使いますか?
A: クラスモジュール内で変数の値を適切に管理し、外部から安全にアクセスさせたい場合に使います。
Q: 標準モジュールで Property を使えますか?
A: いいえ。Property はクラスモジュール内でのみ使用できます。
Q: プロパティを読み取り専用にすることはできますか?
A: はい。Property Get だけを定義し、Property LetProperty Set を省略すると、読み取り専用のプロパティを作成できます。

まとめ

  • Property は、クラスモジュール内で変数の値を取得・設定するために使用する。
  • Property Get で値を取得し、Property Let で値を設定できる。
  • オブジェクトを設定する場合は Property Set を使用する。
  • データのバリデーションを追加すると、安全に管理できる。
  • クラスを使って Excel のセルやデータを管理すると、可読性や保守性が向上する。