[VBA] クラスモジュール

 VBA ではクラスを自作することもできます。
 クラスとはオブジェクトの備えるべきプロパティやメソッドを定義する設計図です。自作クラスのプロパティやメソッドは、クラスモジュール の中に記述します。

クラスモジュールを挿入します

 VBE を起動して、[挿入]、[クラスモジュール] の順に選択すると、プロジェクトエクスプローラーに新しいクラスモジュールが追加されます。今回初めてクラスモジュールを挿入したのであれば、オブジェクト名はデフォルトで "Class1" となっているはずです。

 [VBA] class module 1 クラスモジュールの挿入

 こんな名前のままでは、生成されるオブジェクトの性質がさっぱりわからないので、[Class1] を選択して、プロパティウィンドウの (オブジェクト名) の欄で名前を設定しておきます。今回は Staff という名前をつけておきます。

 [VBA] class module 2 カスタムオブジェクトの名前を設定
 

クラスを定義します

 それでは、コードウィンドウに Staff クラスのオブジェクトの定義 (設計図) を書き込んでみましょう。

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 Info()
 処理
End Sub

 Staff クラスのオブジェクトは社員の氏名、年齢、部署をまとめてメッセージボックスで表示する Info メソッドを備えています。

 こんなふうに自分でクラスを設計してみると、これまで曖昧だった VBA の構造について、かなり見通しがよくなります。プロパティはオブジェクト固有の変数、メソッドはオブジェクト固有の関数 (Sub プロシージャ) なのです。
 

オブジェクトを作成します

 クラスからオブジェクトを生成することを クラスのインスタンス化 といいます。
 Subプロシージャの中で Staff クラスをインスタンス化してみましょう。

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

城戸涼音

 [VBA] class module 3 カスタムオブジェクトのメソッド

 自作クラスのオブジェクトを格納する変数を宣言するときは、

Dim 変数名 As クラス名

と記述します。自作クラスのインスタンス化は New キーワードで実行します。

Set 変数 = New クラス名

 オブジェクトを変数に入れるときは、Set ステートメントを添えることを忘れないでください。

 オブジェクトのプロパティの値は

オブジェクト.プロパティ

で参照できますが、オブジェクトを作成した段階では、プロパティには何の値も設定されていません。必要であれば、

オブジェクト.プロパティ = 値

という構文でプロパティに値を代入します。上のコードにあるように、

mystaff.Name = "城戸涼音"

と記述すれば、Nameプロパティに "城戸涼音" という文字列データが格納されます。

関連コンテンツ
スポンサードリンク

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください