クラスモジュール
VBA では クラス を自作することもできます。クラスとはオブジェクトの備えるべきプロパティやメソッドを定義する設計図です。自作クラスのプロパティやメソッドは、クラスモジュール の中に記述します。VBE を起動して、[挿入]、[クラスモジュール] の順に選択すると、プロジェクトエクスプローラーに新しいクラスモジュールが追加されます。今回初めてクラスモジュールを挿入したのであれば、オブジェクト名はデフォルトで “Class1” となっているはずです。
こんな名前のままでは、生成されるオブジェクトの性質がさっぱりわからないので、[Class1] を選択して、プロパティウィンドウの (オブジェクト名) の欄で名前を設定しておきます。今回は Staff という名前をつけておきます。
クラスの定義
それでは、コードウィンドウに Staff クラスのオブジェクトの定義 (設計図) を書き込んでみましょう。
'[VBA] Class Module (1) Option Explicit '氏名プロパティ Public Name As String '年齢プロパティ Public Age As Long '部署プロパティ Public Department As String '社員情報を表示するメソッド Public Sub Info() MsgBox "氏名:" & Name & vbCrLf & _ "年齢:" & Age & vbCrLf & _ "部署:" & Department End Sub
プロパティは次の構文で定義します。
Public プロパティ名 As データ型
Staff クラスのオブジェクトは氏名、年齢、部署という 3 種類のプロパティを備えています。
メソッドは以下の構文で定義します。
Public Sub メソッド名() 処理 End Sub
Staff クラスのオブジェクトは社員の氏名、年齢、部署をまとめてメッセージボックスで表示する Info メソッドを備えています。こんなふうに自分でクラスを設計してみると、これまで曖昧だった VBA の構造について、かなり見通しがよくなります。プロパティはオブジェクト固有の変数、メソッドはオブジェクト固有の関数 (Sub プロシージャ) なのです。
オブジェクトの作成
クラスからオブジェクトを生成することを クラスの インスタンス化 といいます。Subプロシージャの中で Staff クラスをインスタンス化してみましょう。
'[VBA] Class Module (2) Sub Test_Staff() '変数をStaff型で宣言 Dim mystaff As Staff 'Staffオブジェクトを作成して変数に格納 Set mystaff = New Staff 'プロパティに値を格納 mystaff.Name = "城戸涼音" mystaff.Age = "28" mystaff.Department = "経理" 'Nameプロパティの値を表示 Debug.Print mystaff.Name 'Infoメソッドで社員情報を表示 mystaff.Info End Sub '実行結果:城戸涼音
自作クラスのオブジェクトを格納する変数を宣言するときは、
Dim 変数名 As クラス名
と記述します。自作クラスのインスタンス化は New キーワードで実行します。
Set 変数 = New クラス名
オブジェクトを変数に入れるときは、Set ステートメントを添えることを忘れないでください。
オブジェクトのプロパティの値は
オブジェクト.プロパティ
で参照できますが、オブジェクトを作成した段階では、プロパティには何の値も設定されていません。必要であれば、
オブジェクト.プロパティ = 値
という構文でプロパティに値を代入します。上のコードにあるように、
mystaff.Name = "城戸涼音"
と記述すれば、Nameプロパティに “城戸涼音” という文字列データが格納されます。
コメント
【ChatGPTにクラスモジュールについて質問しました】
[Q] VBA のクラスモジュールの使い方を、子供にもわかるように教えてください。
[ChatGPT] クラスモジュールは、オブジェクト指向プログラミングの一つの機能で、独自のデータ型を作成することができます。これは、新しいオブジェクトを作成して、独自のプロパティとメソッドを持つことができます。以下に、クラスモジュールを使用する方法を簡単に説明します。
1. クラスモジュールの作成
クラスモジュールは、VBAエディタの[挿入]メニューから[クラスモジュール]を選択して作成できます。
2. プロパティの追加
クラスモジュールには、独自のプロパティを追加することができます。例えば、人物の情報を表すPersonクラスに、名前や年齢などのプロパティを追加することができます。プロパティを追加するには、以下のように記述します。
Private m_Name As String
Private m_Age As Integer
Public Property Let Name(value As String)
m_Name = value
End Property
Public Property Get Name() As String
Name = m_Name
End Property
Public Property Let Age(value As Integer)
m_Age = value
End Property
Public Property Get Age() As Integer
Age = m_Age
End Property
3. メソッドの追加
クラスモジュールには、独自のメソッドを追加することができます。例えば、Personクラスに、年齢を1歳増やすメソッドを追加することができます。メソッドを追加するには、以下のように記述します。
Public Sub IncreaseAge()
Age = Age + 1
End Sub
4. クラスモジュールの利用
クラスモジュールで定義したオブジェクトを使用するには、新しいオブジェクトを作成して、プロパティやメソッドにアクセスします。例えば、以下のように記述して、新しいPersonオブジェクトを作成し、プロパティに値を設定し、メソッドを呼び出すことができます。
Dim person As New Person
person.Name = “John Smith”
person.Age = 30
person.IncreaseAge()
以上が、クラスモジュールを使用する基本的な方法です。クラスモジュールは、複雑なプログラムを書くときに役立ちます。例えば、同じ種類のオブジェクトを複数作成する場合、クラスモジュールを使用する