VBA(Visual Basic for Applications)を使っていて「クラスモジュール」という言葉を見かけたことはありませんか?
標準モジュールは使ったことがあるけれど、クラスモジュールはよく分からない…という方も多いでしょう。
クラスモジュールを使うことで、データと処理を1つのまとまりとして管理でき、プログラムをより整理された形にできます。
この記事では、クラスモジュールの基本から実践的な使い方まで、初心者にも分かりやすく解説します。
VBAでの開発の幅を広げたい方、よりスマートなコードを書きたい方は、ぜひ読み進めてみてください。
クラスモジュールは、オブジェクト指向的な考え方を取り入れるためのVBAの仕組みです。
簡単に言えば、「データ」と「処理」をひとまとめにしたテンプレートのようなものです。
たとえば、社員を表すクラスを作成すれば、社員名、社員番号などの情報(プロパティ)と、勤務日数の計算や部署移動などの動作(メソッド)を一括で扱うことができます。
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作業において、コードの見通しを良くしたいと感じたら、ぜひクラスモジュールの活用を検討してみてください。