はじめに
VBAプログラミングを次のレベルに引き上げる強力な機能、それが「クラスモジュール」です。ユーザー定義型(Type)が、関連するデータ(変数)をまとめる「入れ物」だったのに対し、クラスは、その**データ(プロパティ)に加えて、関連する処理(メソッド)**までをひとまとめにした、より高機能な「部品(オブジェクト)」の設計図となります。
例えば、「商品」というクラスを考えたとき、
- プロパティ(データ): 商品名, 価格, 在庫数
- メソッド(処理):
DisplayInfo(情報を表示する),UpdateStock(在庫を更新する)
といったように、データとそれに関連する操作を一つのオブジェクトにカプセル化(内包)できます。これにより、コードが非常に構造化され、再利用性や保守性が飛躍的に向上します。
この記事では、VBAで独自のクラス(カスタムオブジェクト)を作成し、利用するための基本的なステップを解説します。
実装手順の全体像
- クラスモジュールの作成: オブジェクトの設計図となるクラスを作成し、プロパティとメソッドを定義します。
- 標準モジュールの作成: 作成したクラスの「実体(インスタンス)」を生成し、そのプロパティやメソッドを利用するコードを記述します。
ステップ1: クラスモジュールを作成する
まず、オブジェクトの設計図となるクラスを作成します。
- VBEで「挿入」→「クラスモジュール」を選択します。
- 表示されたクラスモジュールのプロパティウィンドウで、
(Name)をClsEmployeeに変更します。 - 以下のコードを貼り付けます。
クラスモジュール: 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を、StringやRangeと同じようにデータ型として使って変数を宣言しています。Set emp = New ClsEmployee: この一行が、クラスという「設計図」から、empという名前の具体的な「オブジェクト(インスタンス)」をメモリ上に生成する命令です。Newキーワードが使われます。emp.EmployeeID = "EMP-101":Property Letで定義したプロパティを使って、オブジェクトの内部データに値を設定しています。emp.DisplayInfo:Public Subで定義したメソッドを呼び出し、オブジェクトに処理を実行させています。
まとめ
今回は、VBAのクラスモジュールを使って、独自のオブジェクトを作成する基本を解説しました。
- クラスモジュールで、オブジェクトの**プロパティ(データ)とメソッド(処理)**を定義する。
- 標準モジュールで、
Newキーワードを使ってクラスからオブジェクト(インスタンス)を生成する。 - 生成したオブジェクトのプロパティやメソッドを
.(ドット) で呼び出して利用する。
クラスを使いこなすことは、本格的なオブジェクト指向プログラミングへの入り口です。最初は少し複雑に感じるかもしれませんが、コードを部品化し、再利用性と保守性を飛躍的に向上させるための非常に強力な武器となります。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
