【VBA】クラスモジュールを使って、独自のオブジェクトを作成する方法(基本編)

目次

はじめに

VBAプログラミングを次のレベルに引き上げる強力な機能、それが「クラスモジュール」です。ユーザー定義型(Type)が、関連するデータ(変数)をまとめる「入れ物」だったのに対し、クラスは、その**データ(プロパティ)に加えて、関連する処理(メソッド)**までをひとまとめにした、より高機能な「部品(オブジェクト)」の設計図となります。

例えば、「商品」というクラスを考えたとき、

  • プロパティ(データ): 商品名, 価格, 在庫数
  • メソッド(処理): DisplayInfo(情報を表示する), UpdateStock(在庫を更新する)

といったように、データとそれに関連する操作を一つのオブジェクトにカプセル化(内包)できます。これにより、コードが非常に構造化され、再利用性や保守性が飛躍的に向上します。

この記事では、VBAで独自のクラス(カスタムオブジェクト)を作成し、利用するための基本的なステップを解説します。


実装手順の全体像

  1. クラスモジュールの作成: オブジェクトの設計図となるクラスを作成し、プロパティとメソッドを定義します。
  2. 標準モジュールの作成: 作成したクラスの「実体(インスタンス)」を生成し、そのプロパティやメソッドを利用するコードを記述します。

ステップ1: クラスモジュールを作成する

まず、オブジェクトの設計図となるクラスを作成します。

  1. VBEで「挿入」→「クラスモジュール」を選択します。
  2. 表示されたクラスモジュールのプロパティウィンドウで、(Name)ClsEmployee に変更します。
  3. 以下のコードを貼り付けます。

クラスモジュール: ClsEmployee のコード

' --- プライベート変数(クラス内部でのみアクセス可能) ---
' オブジェクトのデータを保持するための変数
Private p_EmployeeID As String
Private p_FullName As String

' --- プロパティ(クラスの外部からデータにアクセスするための窓口) ---
' EmployeeIDプロパティ(書き込み専用)
Public Property Let EmployeeID(value As String)
    p_EmployeeID = value
End Property

' FullNameプロパティ(書き込み専用)
Public Property Let FullName(value As String)
    p_FullName = value
End Property

' --- メソッド(オブジェクトが実行できる処理) ---
' 情報を表示するメソッド
Public Sub DisplayInfo()
    MsgBox "社員ID: " & p_EmployeeID & vbCrLf & _
           "氏名: " & p_FullName, vbInformation, "社員情報"
End Sub

ステップ2: 標準モジュールでクラスを利用する

次に、作成した ClsEmployee クラスのオブジェクトを実際に生成し、利用するコードを標準モジュールに記述します。

標準モジュール: Module1 のコード

Sub UseCustomClass()

    ' 1. 作成したクラスの型で変数を宣言
    Dim emp As ClsEmployee
    
    ' 2. Newキーワードで、クラスから新しいオブジェクト(インスタンス)を生成
    Set emp = New ClsEmployee
    
    ' 3. オブジェクトのプロパティに値を設定
    emp.EmployeeID = "EMP-101"
    emp.FullName = "佐藤 一郎"
    
    ' 4. オブジェクトのメソッドを呼び出す
    emp.DisplayInfo

End Sub

実行結果

UseCustomClass マクロを実行すると、「社員情報」というタイトルのメッセージボックスに、設定したIDと氏名が表示されます。


コードの解説

クラスモジュール (ClsEmployee)

  • Private p_EmployeeID As String: クラスの内部だけで使うプライベート変数を宣言しています。クラスのデータを安全に保持するために、外部から直接アクセスできないように Private にするのが一般的です。
  • Public Property Let EmployeeID(...): これが「プロパティ」の定義です。外部から emp.EmployeeID = "..." のように値を書き込むための「入り口(Let)」を提供します。受け取った値は、プライベート変数 p_EmployeeID に格納されます。値を読み取るための「出口(Get)」も定義できます。
  • Public Sub DisplayInfo(): これが「メソッド」の定義です。クラスが持つデータ(プライベート変数)を使って、何らかの処理を実行します。

標準モジュール (Module1)

  • Dim emp As ClsEmployee: 自作したクラス ClsEmployee を、StringRange と同じようにデータ型として使って変数を宣言しています。
  • Set emp = New ClsEmployee: この一行が、クラスという「設計図」から、emp という名前の具体的な「オブジェクト(インスタンス)」をメモリ上に生成する命令です。New キーワードが使われます。
  • emp.EmployeeID = "EMP-101": Property Let で定義したプロパティを使って、オブジェクトの内部データに値を設定しています。
  • emp.DisplayInfo: Public Sub で定義したメソッドを呼び出し、オブジェクトに処理を実行させています。

まとめ

今回は、VBAのクラスモジュールを使って、独自のオブジェクトを作成する基本を解説しました。

  • クラスモジュールで、オブジェクトの**プロパティ(データ)メソッド(処理)**を定義する。
  • 標準モジュールで、New キーワードを使ってクラスからオブジェクト(インスタンス)を生成する。
  • 生成したオブジェクトのプロパティやメソッドを . (ドット) で呼び出して利用する。

クラスを使いこなすことは、本格的なオブジェクト指向プログラミングへの入り口です。最初は少し複雑に感じるかもしれませんが、コードを部品化し、再利用性と保守性を飛躍的に向上させるための非常に強力な武器となります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次