はじめに
VBAのクラスモジュールは、データ(プロパティ)と、そのデータを操作するための処理(メソッド)をひとまとめにした「オブジェクト」の設計図です。プロパティがオブジェクトの「状態」を表すのに対し、メソッドはオブジェクトの「振る舞い」を定義します。
例えば、「商品」オブジェクトがあれば、
- プロパティ: 
Name,Price(商品名や価格といったデータ) - メソッド: 
ApplyDiscount(割引を適用する),GetInfoText(情報を文字列で取得する) 
といったように、データとそれに関連する操作をカプセル化(内包)できます。
この記事では、クラスモジュール内に Public Sub と Public Function を使って、独自のメソッドを定義し、利用する方法を解説します。
クラスにメソッドを定義するVBAサンプルコード
この例では、ClsInventory という商品在庫を表すクラスを作成し、在庫を追加するメソッドと、現在の在庫状況を文字列で返すメソッドを実装します。
ステップ1: クラスモジュールを作成する
- VBEで「挿入」→「クラスモジュール」を選択します。
 - プロパティウィンドウで 
(Name)をClsInventoryに変更します。 - 以下のコードを貼り付けます。
 
クラスモジュール: ClsInventory のコード
' --- プロパティ ---
Public ItemName As String
Public Quantity As Long
' --- メソッド (Subプロシージャ) ---
' 在庫数を増やす「アクション」を実行するメソッド
Public Sub AddToStock(ByVal amount As Long)
    ' 現在の在庫数(Quantity)に、引数で渡された数を加算
    Me.Quantity = Me.Quantity + amount
End Sub
' --- メソッド (Functionプロシージャ) ---
' 現在の状態を元に、情報を「値として返す」メソッド
Public Function GetStatusText() As String
    GetStatusText = Me.ItemName & " の現在の在庫は " & Me.Quantity & " 個です。"
End Function
ステップ2: 標準モジュールでクラスのメソッドを利用する
次に、作成した ClsInventory クラスのオブジェクトを実際に生成し、そのメソッドを呼び出すコードを標準モジュールに記述します。
標準モジュール: Module1 のコード
Sub ManageInventory()
    ' 1. クラスから新しいオブジェクト(インスタンス)を生成
    Dim item As New ClsInventory
    
    ' 2. オブジェクトのプロパティに初期値を設定
    item.ItemName = "A4コピー用紙"
    item.Quantity = 100
    
    ' 3. Subメソッドを呼び出して、オブジェクトの状態を変更
    item.AddToStock 50 ' 在庫を50個追加
    
    ' 4. Functionメソッドを呼び出して、オブジェクトの情報を取得
    Dim status As String
    status = item.GetStatusText()
    
    ' 結果をメッセージボックスに表示
    MsgBox status, vbInformation, "在庫状況"
End Sub
実行結果
ManageInventory マクロを実行すると、「A4コピー用紙 の現在の在庫は 150 個です。」というメッセージボックスが表示されます。
コードの解説
Public Sub AddToStock(...)
クラスモジュール内に記述された Public Sub は、そのクラスのメソッドになります。
- このメソッドは、
item.AddToStock 50のように呼び出され、オブジェクト自身のプロパティ(Me.Quantity)の値を変更する「アクション」を実行します。 Subなので、戻り値は返しません。
Public Function GetStatusText() As String
クラスモジュール内に記述された Public Function も、同様にメソッドになります。
- このメソッドは、
status = item.GetStatusText()のように呼び出され、オブジェクト自身のプロパティ(ItemNameやQuantity)を元に、何らかの値を計算・編集し、結果を戻り値として返します。 Functionなので、戻り値を返します。
Me キーワード
クラスモジュール内で Me というキーワードを使うと、そのオブジェクト自身を指します。Me.Quantity は ClsInventory.Quantity と書くのと似ていますが、コードが実行されているインスタンスそのものを指すため、Me を使うのが一般的で確実です。
まとめ
今回は、VBAクラスに独自のメソッド(振る舞い)を定義する方法を解説しました。
- クラスモジュール内の 
Public Subは、オブジェクトにアクションを実行させるためのメソッドになる。 - クラスモジュール内の 
Public Functionは、オブジェクトの状態に基づいて値を返すためのメソッドになる。 
プロパティ(データ)とメソッド(処理)を適切にクラス内にまとめることで、コードの部品化が進み、他のプログラムからの再利用が容易になります。これは、大規模で複雑なアプリケーションを構築するための、非常に重要な設計思想です。
