【VBA】クラスの初期化イベント Class_Initialize の使い方(コンストラクタ)

目次

はじめに

VBAのクラスモジュールを使って独自のオブジェクトを作成する際、オブジェクトが生成された(New された)瞬間に、プロパティの初期値を設定したり、何らかの準備処理を自動で実行したりしたい場合があります。

例えば、「商品」オブジェクトを作成した瞬間に、在庫数をデフォルトで 0 に設定しておく、といった処理です。

このような「オブジェクトが生まれた瞬間の初期化処理」を定義するために、VBAのクラスモジュールには Class_Initialize という特別なイベントプロシージャが用意されています。これは、他のプログラミング言語における「コンストラクタ」に相当する機能です。

この記事では、Class_Initialize イベントを使って、クラスの初期化処理をスマートに実装する方法を解説します。


Class_Initialize を使ったVBAサンプルコード

この例では、ClsUserProfile というユーザー情報を扱うクラスを作成し、オブジェクトが生成された瞬間に、RegisterDate(登録日)プロパティに現在の日時が自動でセットされるようにします。

ステップ1: クラスモジュールを作成する

  1. VBEで「挿入」→「クラスモジュール」を選択します。
  2. プロパティウィンドウで (Name)ClsUserProfile に変更します。
  3. 以下のコードを貼り付けます。

クラスモジュール: ClsUserProfile のコード

' --- プロパティ ---
Public UserName As String
Public RegisterDate As Date

' --- 初期化イベント ---
' オブジェクトが New された瞬間に自動的に実行される
Private Sub Class_Initialize()
    ' プロパティの初期値を設定
    Me.UserName = "(未設定)"
    Me.RegisterDate = Now() ' 現在の日時を自動で設定
    
    ' 初期化されたことをイミディエイトウィンドウに出力して確認
    Debug.Print "ClsUserProfile オブジェクトが初期化されました。"
End Sub

' --- メソッド ---
' 情報を文字列で返すメソッド
Public Function GetInfo() As String
    GetInfo = "ユーザー名: " & Me.UserName & ", 登録日時: " & Me.RegisterDate
End Function

ステップ2: 標準モジュールでクラスを利用する

次に、作成した ClsUserProfile クラスのオブジェクトを生成し、初期化が自動で行われることを確認します。

標準モジュール: Module1 のコード

Sub CreateUser()
    
    Debug.Print "これからオブジェクトを生成します..."
    
    ' Newキーワードで、新しいオブジェクト(インスタンス)を生成
    ' この瞬間に、ClsUserProfile の Class_Initialize が実行される
    Dim user As New ClsUserProfile
    
    Debug.Print "オブジェクトが生成されました。"
    
    ' 初期化イベントで設定されたデフォルト値を表示
    Debug.Print user.GetInfo()
    
    ' プロパティに新しい値を設定
    user.UserName = "田中 宏"
    
    ' 変更後の情報を表示
    Debug.Print user.GetInfo()

End Sub

実行結果

CreateUser マクロを実行すると、VBEのイミディエイトウィンドウ(Ctrl+Gで表示)に以下のように出力されます。

これからオブジェクトを生成します...
ClsUserProfile オブジェクトが初期化されました。
オブジェクトが生成されました。
ユーザー名: (未設定), 登録日時: 2025/08/17 8:41:22
ユーザー名: 田中 宏, 登録日時: 2025/08/17 8:41:22

New ClsUserProfile の行で、Class_Initialize 内の Debug.Print が実行されていること、そして生成直後のオブジェクトの UserNameRegisterDate に初期値が設定されていることが確認できます。


コードの解説

Private Sub Class_Initialize()

これは特別な名前のイベントプロシージャです。クラスモジュールの上部にあるドロップダウンから (General)Class に、右側のドロップダウンで Initialize を選ぶことでも生成できます。

この Sub の中に書かれたコードは、そのクラスのオブジェクトが Dim obj As New ...Set obj = New ... によってメモリ上に生成された瞬間に、一度だけ自動的に実行されます。

引数を取ることができないため、外部から初期化のための値を渡すことはできません。値を渡したい場合は、別途 Init のような初期化用のメソッドを自分で作成する必要があります。


まとめ

今回は、VBAクラスの Class_Initialize イベントを使って、オブジェクト生成時に初期化処理を自動実行する方法を解説しました。

  • Class_Initialize は、オブジェクトが New されたときに自動で実行される特別なイベントプロシージャ。
  • プロパティのデフォルト値を設定したり、オブジェクトが利用可能になる前の準備処理を行ったりするのに最適。
  • 他の言語における「コンストラクタ」と同様の役割を果たす。

Class_Initialize を活用することで、オブジェクトが必ず適切な初期状態から始まることを保証でき、より安全で信頼性の高いプログラムを構築することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次