VBAクラスモジュールとは?メリットと基本的な使い方を初心者向けに解説
生徒
「先生、VBAの編集画面にある『クラスモジュール』って何ですか?標準モジュールとは違うものなんですか?」
先生
「クラスモジュールは、自分専用の新しい『道具(オブジェクト)』を設計するための設計図のようなものですよ。」
生徒
「設計図……?なんだか難しそうですね。私のような初心者でも使い道はありますか?」
先生
「最初は難しく感じるかもしれませんが、仕組みがわかると複雑なプログラムをスッキリ整理できるようになります。まずは簡単な例え話から始めてみましょう!」
1. クラスモジュールとは「オリジナルの設計図」
Excel VBAには、最初から「シート」や「セル」といった便利な道具が用意されています。これらを専門用語でオブジェクトと呼びます。クラスモジュールとは、これらと同じように「自分だけの便利な道具」を自作するための設計図のことです。
例えば、あなたが「自動車」をプログラムで扱いたいと考えたとします。自動車には「色」や「車種」というデータがあり、「走る」「止まる」という動きがありますよね。これらを一つのセットとしてまとめた「自動車という型(クラス)」を定義するのがクラスモジュールの役割です。
標準モジュールが「上から順番に実行する手順書」だとすれば、クラスモジュールは「モノの性質と動きを定義した説明書」のようなものだと考えてください。パソコンを初めて触る方でも、「型紙(クラス)」から「実物(インスタンス)」を作る、というイメージを持つと分かりやすくなります。
2. なぜクラスモジュールを使うの?3つの大きなメリット
初心者のうちは標準モジュールだけでも十分マクロを作ることができます。しかし、プログラムが大きくなってくると、クラスモジュールを使うことで以下のような素晴らしい恩恵が受けられます。
- プログラムがスッキリ整理される: データと処理をセットで管理できるため、どこに何が書いてあるか一目でわかるようになります。
- 使い回し(再利用)が簡単になる: 一度作った設計図は、他のプログラムでも簡単に使い回すことができます。
- 間違い(バグ)が減る: 道具の使い方が限定されるため、変な値を入力してエラーになるようなミスを未然に防ぎやすくなります。
これを専門用語でカプセル化と呼びます。大切な中身を「カプセル」の中に隠して、外からは決まったボタン(操作)だけが見えるようにする仕組みです。これにより、複雑な仕組みを知らなくても、安全に道具を使いこなせるようになるのです。
3. クラスモジュールの基本用語:プロパティとメソッド
クラスを理解するために避けて通れないのが「プロパティ」と「メソッド」という言葉です。自動車の例えで解説しましょう。
| 用語 | 意味 | 自動車の例 |
|---|---|---|
| プロパティ | そのモノが持っている「属性」や「データ」 | 車の色、ナンバー、ガソリン残量 |
| メソッド | そのモノができる「動作」や「処理」 | アクセルを踏む(走る)、ブレーキをかける(止まる) |
クラスモジュールの中には、この「プロパティ(どんなデータを持つか)」と「メソッド(どんな動きをするか)」を書き込んでいきます。これらを組み合わせることで、まるで本物のモノを扱うようにプログラミングができるようになるのです。
4. 【実践】クラスモジュールを作ってみよう
それでは、実際に「社員(Employee)」という簡単なクラスを作ってみましょう。VBE(開発画面)のメニューから「挿入」→「クラスモジュール」を選び、名前を clsEmployee に変更してください。
まずは、社員の名前を保存するための「プロパティ」を作成するコードです。
' クラスモジュール(名前:clsEmployee)の中に書く内容
Public Name As String ' 社員名を保存するプロパティ
' 挨拶をするメソッド(動作)
Sub SayHello()
MsgBox "こんにちは、私は " & Name & " です!"
End Sub
ここでは Public という言葉を使っていますが、これは「外(標準モジュールなど)から自由に見ることができる」という意味の魔法の言葉です。これで「名前というデータ」を持ち、「挨拶するという動き」ができる設計図が完成しました。
5. 設計図から「実物」を作る:インスタンス化
設計図(クラス)を作っただけでは、まだマクロは動きません。設計図をもとに、メモリ上に「実物」を作り出す必要があります。この作業をインスタンス化と呼びます。
実物を作るには、標準モジュールで New というキーワードを使います。以下のコードを標準モジュールに書いてみましょう。
' 標準モジュールの中に書く内容
Sub UseClass()
Dim taro As New clsEmployee ' 社員「太郎」という実物を作る
taro.Name = "田中太郎" ' プロパティにデータをセット
taro.SayHello ' メソッドを呼び出して挨拶させる
End Sub
このように、設計図から実体を作ることで、初めてプログラムの中でその道具を使えるようになります。一つの設計図から、太郎さん、花子さんといった複数の実体を別々に作ることも可能です。
6. 初心者がクラスを使うべきタイミング
「便利そうなのはわかったけど、いつ使えばいいの?」と思うかもしれません。初心者のうちは、以下のような場面で検討してみるのがおすすめです。
- 同じようなデータがたくさん出てくるとき: 例えば、複数の請求先データ(宛名、金額、期限)をセットで扱いたいときなどです。
- 複雑な計算を隠したいとき: 長い計算式をクラスの中に閉じ込めておけば、使うときは
.Calculateと書くだけで済むようになります。 - Excelのイベントを高度に制御したいとき: 複数のボタンに同じ動きをさせたいときなどにクラスが真価を発揮します。
無理に最初から全てをクラスにする必要はありません。まずは「データの塊を一つにまとめる箱」として使ってみることから始めましょう。
7. クラスモジュールを整理するコツ
クラスモジュールを使いこなすと、VBAプロジェクトの中が整理され、管理がとても楽になります。プロジェクトをきれいに保つためのコツをいくつかご紹介します。
- 名前の付け方を工夫する: クラス名には
cls(クラスの略)を先頭に付けると、標準モジュールと区別しやすくなります(例:clsDatabase)。 - 一クラス一責任: 「社員クラス」の中に「売上集計の処理」まで詰め込まないようにしましょう。一つのクラスには、一つの役割だけを持たせるのが美しい設計のコツです。
- コメントを丁寧に書く: クラスは一度作ると中身を見なくなります。そのため、後で自分が困らないように「このプロパティは何を保存するものか」を日本語で書き残しておきましょう。
8. 実行結果を確認してみよう
実際にクラスを使ったプログラムを動かすと、どのような結果になるか見てみましょう。先ほどの UseClass を実行すると、以下のようなメッセージボックスが表示されます。
(メッセージボックスの出力結果)
こんにちは、私は 田中太郎 です!
一見、標準モジュールだけで書いたときと同じ結果に見えますが、内部では「田中太郎」というデータを持った個体が独立して動いています。もし、もう一人「鈴木花子」さんを New で追加しても、太郎さんの名前が書き換わることはありません。これがクラスモジュールを使うことで得られる「独立性」の素晴らしさです。
9. クラスモジュール習得への道
クラスモジュールは、VBAの中でも「中級者」への入り口と言われる難しい分野です。一度で全てを理解しようとしなくて大丈夫です。まずは「変数がたくさんあって管理が大変だな」と感じたときに、この記事を思い出してください。
何度も「設計図を作って、実物を取り出す」という作業を繰り返すうちに、パズルのピースがはまるように理解が深まるはずです。Excel VBAの世界を広げる強力な武器として、少しずつ触れていってみてくださいね。