標準モジュールとクラスモジュールは、目的や役割が大きく異なるため、プロジェクトの構造を考えるうえで「どちらに書くべきか」を判断することが重要です。
ここでは、実務での使用シーンを踏まえながら、それぞれの適した用途と使い分けについて解説します。
目次
1. 標準モジュールが向いている場面
標準モジュールは「処理の集合」を管理するための場所です。
次のようなケースでは、標準モジュールを選ぶのが一般的です。
① 共通処理・ロジックをまとめたいとき
例:
- データ整形処理
- 計算ロジック
- 文字列操作関数
- ファイル操作関数
チーム開発や長期運用を考えると、これらの共通ロジックは1つのモジュールにまとめておくと保守性が上がります。
② マクロ(Sub)としてまとめたい処理
- ボタンを押したときに動く実行マクロ
- 月次処理の開始処理
- バッチ処理やレポート出力処理
「ユーザーが直接実行するマクロ」は標準モジュールに置くのが自然です。
③ プロジェクト全体で使う関数を置きたいとき
Function を標準モジュールに置けば、Excelワークシート関数として使える場合もあります。
Public Function Add2(a As Long, b As Long) As Long
Add2 = a + b
End Function
2. クラスモジュールが向いている場面
クラスモジュールは「オブジェクトとして扱いたい情報」を管理するための場所です。
複数のデータを一つの単位として扱いたい、関連するデータと処理をセットにしたい、という場合に力を発揮します。
① “モノ”としてまとめたい情報がある場合(データ+処理)
例:
- 顧客情報(名前・住所・電話番号…+操作メソッド)
- 売上データの1レコード(金額・日付…+計算処理)
- 設定情報(環境設定、パス管理)
データ構造をひとまとまりの「オブジェクト」にすると、後で拡張しやすくなります。
② 複数の“インスタンス”を扱いたいとき
例:
- 顧客一覧
- 商品一覧
- タスク管理リスト(1タスク=1オブジェクト)
同じ型(クラス)から複数のインスタンスを作ることで、管理しやすいデータ群を構築できます。
③ Excelのイベントを独自に扱いたいとき(WithEvents)
クラスモジュールのみ、イベントを持つオブジェクトを扱えます。
例:
- Worksheet_Change をシート以外の場所で受ける
- Application のイベントを使って入力監視をする
- 独自のイベントフローを作る
“イベント処理を外部化したい”ときはクラスモジュールが必須です。
3. 実務での「使い分け」の考え方
実務のVBA開発では、次のような基準で判断すると使い分けがスムーズになります。
✔ 標準モジュールに書くべきもの
- 単独で動作する処理(マクロ)
- 共通関数・ユーティリティ
- 処理フローの入口(Main処理)
- 単純なデータ処理
✔ クラスモジュールに書くべきもの
- データ構造をひとまとまりにしたいとき
- プロパティ(状態)とメソッド(処理)をセットで扱いたいとき
- 複数の同型データを扱うとき
- イベント処理を外に出したいとき
- ソフトウェア的に拡張しやすい構造にしたいとき
4. 初心者が最初に意識すべきポイント
- 最初は標準モジュールだけでOK
→ ほとんどのマクロは標準モジュールで完結する - データが増えて「配列やDictionaryだけでは管理しにくい」状況になったらクラスの出番
→ 設計がシンプルになる - イベント処理を外部化したい場合はクラスモジュール一択
→ Applicationイベントなどはクラスでしか扱えない
コメント