【VBA】標準モジュールとクラスモジュール:それぞれの用途と使い分け

標準モジュールとクラスモジュールは、目的や役割が大きく異なるため、プロジェクトの構造を考えるうえで「どちらに書くべきか」を判断することが重要です。
ここでは、実務での使用シーンを踏まえながら、それぞれの適した用途と使い分けについて解説します。


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イベントなどはクラスでしか扱えない

コメント

タイトルとURLをコピーしました