【VBA】モジュール単位で役割分担する実例|Utility・Data・Service の最適構成

VBAでは、プロシージャを1つの標準モジュールに詰め込みすぎると、
保守性が極端に下がり、バグの温床 になりがちです。

そこで本記事では、VBAプロジェクトでよく使われる
モジュール単位での役割分担の実例 を、現場レベルでわかりやすく解説します。


スポンサーリンク

1. 共通処理モジュール(Utility / Common)

共通して繰り返し使う処理 をまとめたモジュール。

▼ 主な内容

  • 日付フォーマット処理
  • メッセージ表示
  • ログ出力
  • ファイル存在チェック
  • 数値変換・文字列処理 など

▼ モジュール名の例

  • mdlCommon
  • mdlUtility
  • mdlHelper

▼ メリット

  • どこからでも呼べるため重複コードを削減
  • 修正や改善を一か所で済ませられる(保守性向上)

▼ 例:共通メッセージ処理

'共通メッセージ表示
Public Sub ShowMsg(msg As String)
    MsgBox msg, vbInformation
End Sub

これにより、他のモジュールでは

Call ShowMsg("処理が完了しました。")

で済む。


スポンサーリンク

2. データ取得系モジュール(Data / Repository)

データの読み書き・取得を担当するモジュール

シートを直接操作するプロシージャは、このモジュールに集約すると保守性が大幅に向上します。

▼ 主な内容

  • シートからデータを読み込む
  • 配列やコレクションで返す
  • データのフィルタリング
  • 書き込み処理を一括管理

▼ モジュール名の例

  • mdlData
  • mdlRepository
  • mdlSheetReader

▼ メリット

  • 他のモジュールが「どのシートのどの位置か」を意識せず利用できる
  • シート構造が変わった場合でも、このモジュールだけ修正すればよい

スポンサーリンク

3. ビジネスロジックモジュール(Service / Logic)

プロジェクトの核となる 業務処理ロジック を担当。

▼ 主な内容

  • 売上計算
  • 出欠判定
  • データ加工
  • チェック・バリデーション

▼ モジュール名の例

  • mdlService
  • mdlLogic
  • mdlProcessor

▼ メリット

  • 業務ロジックとデータ取得を分離できる
  • テストしやすく、処理の可読性が上がる

スポンサーリンク

4. UI操作モジュール(Form / View / Control)

ユーザーの操作に関連する処理をまとめるモジュール。

▼ 主な内容

  • ボタンのクリックイベント(UserFormなど)
  • メニュー操作
  • UIからロジックを呼び出すだけの処理

▼ モジュール名の例

  • mdlUI
  • frmMain(ユーザーフォームの場合)
  • mdlView

▼ ポイント

UIはロジックやデータ処理とは切り離し、
「UIはイベントを受け取ってロジックを呼ぶだけ」に徹する構造が理想です。


スポンサーリンク

5. 設定・定数モジュール(Config / Const)

プロジェクトで使う 定数 をまとめるモジュール。

▼ 主な内容

  • ファイルパス
  • シート名
  • 固定メッセージ
  • フラグ値

▼ モジュール名の例

  • mdlConfig
  • mdlConst
  • mdlSetting

▼ メリット

  • 定数の変更を一か所で行える
  • 他のコードを読みやすくできる(魔法の数字を排除)

スポンサーリンク

6. モジュール構成の一例(業務プロジェクトの場合)

実務でよくあるプロジェクト構成の例です。

mdlMain          … エントリーポイント(実行開始)
mdlCommon        … 共通処理
mdlConfig        … 定数
mdlData          … シートデータ取得
mdlService       … 業務ロジック
mdlUI            … ボタン操作などのUI制御
frmInput         … 入力用UserForm

▼ メリット

  • モジュールの責務が明確
  • 属人化が減る
  • 新しく参加した人もどこに何があるか分かる
  • バグ調査が速い
  • 保守に強いプロジェクトになる

スポンサーリンク

7. まとめ

モジュール単位で役割を分担すると、

  • 処理の責務が明確になる
  • 保守性が上がる
  • プロジェクトが大規模化しても破綻しない
  • 他者がコードを読みやすくなる

というメリットがあります。

コメント

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