はじめに
VBAのクラスモジュールを使って独自のオブジェクトを作成する際、オブジェクトが生成された(New された)瞬間に、プロパティの初期値を設定したり、何らかの準備処理を自動で実行したりしたい場合があります。
例えば、「商品」オブジェクトを作成した瞬間に、在庫数をデフォルトで 0 に設定しておく、といった処理です。
このような「オブジェクトが生まれた瞬間の初期化処理」を定義するために、VBAのクラスモジュールには Class_Initialize という特別なイベントプロシージャが用意されています。これは、他のプログラミング言語における「コンストラクタ」に相当する機能です。
この記事では、Class_Initialize イベントを使って、クラスの初期化処理をスマートに実装する方法を解説します。
Class_Initialize を使ったVBAサンプルコード
この例では、ClsUserProfile というユーザー情報を扱うクラスを作成し、オブジェクトが生成された瞬間に、RegisterDate(登録日)プロパティに現在の日時が自動でセットされるようにします。
ステップ1: クラスモジュールを作成する
- VBEで「挿入」→「クラスモジュール」を選択します。
- プロパティウィンドウで
(Name)をClsUserProfileに変更します。 - 以下のコードを貼り付けます。
クラスモジュール: 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 が実行されていること、そして生成直後のオブジェクトの UserName と RegisterDate に初期値が設定されていることが確認できます。
コードの解説
Private Sub Class_Initialize()
これは特別な名前のイベントプロシージャです。クラスモジュールの上部にあるドロップダウンから (General) を Class に、右側のドロップダウンで Initialize を選ぶことでも生成できます。
この Sub の中に書かれたコードは、そのクラスのオブジェクトが Dim obj As New ... や Set obj = New ... によってメモリ上に生成された瞬間に、一度だけ自動的に実行されます。
引数を取ることができないため、外部から初期化のための値を渡すことはできません。値を渡したい場合は、別途 Init のような初期化用のメソッドを自分で作成する必要があります。
まとめ
今回は、VBAクラスの Class_Initialize イベントを使って、オブジェクト生成時に初期化処理を自動実行する方法を解説しました。
Class_Initializeは、オブジェクトがNewされたときに自動で実行される特別なイベントプロシージャ。- プロパティのデフォルト値を設定したり、オブジェクトが利用可能になる前の準備処理を行ったりするのに最適。
- 他の言語における「コンストラクタ」と同様の役割を果たす。
Class_Initialize を活用することで、オブジェクトが必ず適切な初期状態から始まることを保証でき、より安全で信頼性の高いプログラムを構築することができます。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
