VBA(Visual Basic for Applications)を使っていて「クラスモジュール」という言葉を見かけたことはありませんか?
標準モジュールは使ったことがあるけれど、クラスモジュールはよく分からない…という方も多いでしょう。
クラスモジュールを使うことで、データと処理を1つのまとまりとして管理でき、プログラムをより整理された形にできます。
この記事では、クラスモジュールの基本から実践的な使い方まで、初心者にも分かりやすく解説します。
VBAでの開発の幅を広げたい方、よりスマートなコードを書きたい方は、ぜひ読み進めてみてください。
クラスモジュールとは何か?
クラスモジュールは、オブジェクト指向的な考え方を取り入れるためのVBAの仕組みです。
簡単に言えば、「データ」と「処理」をひとまとめにしたテンプレートのようなものです。
たとえば、社員を表すクラスを作成すれば、社員名、社員番号などの情報(プロパティ)と、勤務日数の計算や部署移動などの動作(メソッド)を一括で扱うことができます。
クラスモジュールの作成方法
1. クラスモジュールの追加
- VBAエディターを開きます(Alt + F11)。
- メニューから「挿入」→「クラスモジュール」を選択。
- プロパティウィンドウで、クラス名を「Employee」などに変更します。
2. クラスのプロパティを定義する
Employeeクラスの中身
Private pName As String
Private pID As Long
Public Property Let Name(value As String)
pName = value
End Property
Public Property Get Name() As String
Name = pName
End Property
Public Property Let ID(value As Long)
pID = value
End Property
Public Property Get ID() As Long
ID = pID
End Property
このように、プロパティ(値の入れ物)を定義します。Let
は値の代入、Get
は値の取得です。
クラスモジュールを使ったオブジェクトの作成と使用
標準モジュールで、先ほど作成したEmployeeクラスを使ってみましょう。
Sub TestClass()
Dim emp As Employee
Set emp = New Employee
emp.Name = "山田太郎"
emp.ID = 1001
MsgBox "社員名:" & emp.Name & vbCrLf & "社員番号:" & emp.ID
End Sub
上記のコードを実行すると、作成したEmployeeオブジェクトに対して、プロパティの値を設定し、メッセージボックスに表示できます。
メソッド(処理)をクラスに追加する
クラスに機能(メソッド)を追加することもできます。たとえば「自己紹介」メソッドを追加します。
Public Function Introduce() As String
Introduce = "こんにちは、私は " & pName & " です。社員番号は " & pID & " です。"
End Function
これを標準モジュールから呼び出すと:
Sub TestIntroduce()
Dim emp As Employee
Set emp = New Employee
emp.Name = "田中花子"
emp.ID = 1002
MsgBox emp.Introduce()
End Sub
結果として、「こんにちは、私は田中花子です。社員番号は1002です。」と表示されます。
クラスモジュールのメリット
クラスモジュールを使うことで、以下のようなメリットがあります:
- データと処理がセットで管理でき、コードが読みやすくなる
- 同じ型のオブジェクトを複数作成できる(例:社員リストなど)
- 保守性・拡張性が向上する
- 標準モジュールよりも、構造的にプログラムを設計できる
コレクションと組み合わせて使う
複数のオブジェクトを管理したい場合、Collection
と組み合わせるのがおすすめです。
Sub CreateEmployeeList()
Dim empList As New Collection
Dim i As Integer
Dim emp As Employee
For i = 1 To 3
Set emp = New Employee
emp.Name = "社員" & i
emp.ID = 1000 + i
empList.Add emp
Next i
For Each emp In empList
MsgBox emp.Introduce
Next emp
End Sub
このように、社員オブジェクトを複数作成して、順に処理することができます。
クラスモジュールの注意点
- クラス名は標準モジュールや変数名と重複しないようにしましょう
Set
キーワードを使ってオブジェクトを代入するのを忘れずに- クラスは用途が明確なときに使うと効果的(なんでもかんでもクラスにしない)
まとめ
VBAのクラスモジュールは、プログラムをより構造化して整理するための強力な手段です。
最初は少し取っつきにくく感じるかもしれませんが、慣れてくると「クラスで書いたほうがスッキリする!」と感じる場面が増えてきます。
この記事では、クラスの基本構造、プロパティやメソッドの定義、使い方の例、そして応用まで紹介しました。
日々のVBA作業において、コードの見通しを良くしたいと感じたら、ぜひクラスモジュールの活用を検討してみてください。