VBAのClassでカスタムオブジェクトを作成する方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Classの概要

オブジェクト指向プログラミングを実現 VBAの予約語

Class

概要 Class ステートメントは、VBAでカスタムオブジェクト(クラス)を定義するために使用されます。クラスを作成することで、データと処理をまとめたオブジェクト指向のプログラミングが可能になります。

わかりやすく説明 自分だけのオブジェクトを作るための仕組み。

  • カスタムオブジェクトを作成できる。
  • データと処理を1つのオブジェクトにまとめることができる。
  • Excel 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 で解放するとよい。