【VBA】クラスモジュールの使い方
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プロパティに “城戸涼音” という文字列データが格納されます。
コメント