Classの概要
オブジェクト指向プログラミングを実現 VBAの予約語 | ||
Class 概要 Class ステートメントは、VBAでカスタムオブジェクト(クラス)を定義するために使用されます。クラスを作成することで、データと処理をまとめたオブジェクト指向のプログラミングが可能になります。 わかりやすく説明 自分だけのオブジェクトを作るための仕組み。 |
||
|
Classの基本的な使い方
以下の例では、Person
というクラスを作成し、名前と年齢を管理します。
' クラスモジュール(ClassModule)で作成
' クラス名: Person
Public Name As String
Public Age As Integer
このクラスをVBAの標準モジュールで使用します。
Sub TestClass()
Dim p As Person
Set p = New Person
p.Name = "田中"
p.Age = 30
MsgBox "名前: " & p.Name & vbCrLf & "年齢: " & p.Age
End Sub
解説:
Public Name As String
: 名前を格納するプロパティ。Public Age As Integer
: 年齢を格納するプロパティ。Set p = New Person
: クラスの新しいインスタンスを作成。
プロパティを追加する(Property Let / Get)
プロパティの設定(Let)と取得(Get)を定義できます。
' クラスモジュール(ClassModule): Person
Private pName As String
Private pAge As Integer
Public Property Let Name(value As String)
pName = value
End Property
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Age(value As Integer)
pAge = value
End Property
Public Property Get Age() As Integer
Age = pAge
End Property
解説:
Property Let
: 値を設定する。Property Get
: 値を取得する。- データをカプセル化し、直接アクセスを防ぐことができる。
Excel VBAでのClassの活用
クラスを使うと、Excelシートのデータ管理をシンプルにできます。
Sub LoadPersonData()
Dim p As Person
Set p = New Person
p.Name = Range("A1").Value
p.Age = Range("B1").Value
MsgBox "名前: " & p.Name & vbCrLf & "年齢: " & p.Age
End Sub
解説:
- ExcelシートのA1セルから名前、B1セルから年齢を取得。
- クラスのプロパティに値を格納し、管理しやすくする。
クラスにメソッドを追加
クラス内に処理を実行するメソッドを追加できます。
' クラスモジュール(ClassModule): Person
Public Sub ShowInfo()
MsgBox "名前: " & Name & vbCrLf & "年齢: " & Age
End Sub
このメソッドを標準モジュールから呼び出します。
Sub TestMethod()
Dim p As Person
Set p = New Person
p.Name = "佐藤"
p.Age = 25
p.ShowInfo
End Sub
解説:
ShowInfo
: クラスの情報を表示するメソッド。- オブジェクトの振る舞いを定義し、コードの再利用性を高める。
注意点
- クラスはクラスモジュールで作成する: 標準モジュールではなく、VBAエディタの「クラスモジュール」を追加して作成する必要がある。
- オブジェクトの解放が必要:
Set p = Nothing
を使って不要になったオブジェクトを解放するとメモリ効率が向上する。 - カプセル化を活用: 変数を
Private
にしてProperty Get/Let
を使うことで、安全にデータを管理できる。
よくある質問
- Q: クラスモジュールはどこに追加できますか?
- A: VBAエディタの「挿入」メニューから「クラスモジュール」を選択して追加できます。
- Q: クラスを使うメリットは?
- A: データと処理を1つのオブジェクトにまとめることで、コードの管理がしやすくなります。
- Q: 標準モジュールとクラスモジュールの違いは?
- A: 標準モジュールは手続き型のコード、クラスモジュールはオブジェクト指向のコードを作成するために使います。
まとめ
- Class ステートメントを使うと、VBAでカスタムオブジェクトを作成できる。
- プロパティ(Property Get/Let)を使うことで、安全なデータ管理が可能。
- Excel VBAでデータを整理し、可読性や再利用性を向上できる。
- メソッドを定義することで、オブジェクトの動作を統一できる。
- 不要になったオブジェクトは
Set p = Nothing
で解放するとよい。