VBAでは、プロシージャを1つの標準モジュールに詰め込みすぎると、
保守性が極端に下がり、バグの温床 になりがちです。
そこで本記事では、VBAプロジェクトでよく使われる
モジュール単位での役割分担の実例 を、現場レベルでわかりやすく解説します。
目次
1. 共通処理モジュール(Utility / Common)
共通して繰り返し使う処理 をまとめたモジュール。
▼ 主な内容
- 日付フォーマット処理
- メッセージ表示
- ログ出力
- ファイル存在チェック
- 数値変換・文字列処理 など
▼ モジュール名の例
mdlCommonmdlUtilitymdlHelper
▼ メリット
- どこからでも呼べるため重複コードを削減
- 修正や改善を一か所で済ませられる(保守性向上)
▼ 例:共通メッセージ処理
'共通メッセージ表示
Public Sub ShowMsg(msg As String)
MsgBox msg, vbInformation
End Sub
これにより、他のモジュールでは
Call ShowMsg("処理が完了しました。")
で済む。
2. データ取得系モジュール(Data / Repository)
データの読み書き・取得を担当するモジュール。
シートを直接操作するプロシージャは、このモジュールに集約すると保守性が大幅に向上します。
▼ 主な内容
- シートからデータを読み込む
- 配列やコレクションで返す
- データのフィルタリング
- 書き込み処理を一括管理
▼ モジュール名の例
mdlDatamdlRepositorymdlSheetReader
▼ メリット
- 他のモジュールが「どのシートのどの位置か」を意識せず利用できる
- シート構造が変わった場合でも、このモジュールだけ修正すればよい
3. ビジネスロジックモジュール(Service / Logic)
プロジェクトの核となる 業務処理ロジック を担当。
▼ 主な内容
- 売上計算
- 出欠判定
- データ加工
- チェック・バリデーション
▼ モジュール名の例
mdlServicemdlLogicmdlProcessor
▼ メリット
- 業務ロジックとデータ取得を分離できる
- テストしやすく、処理の可読性が上がる
4. UI操作モジュール(Form / View / Control)
ユーザーの操作に関連する処理をまとめるモジュール。
▼ 主な内容
- ボタンのクリックイベント(UserFormなど)
- メニュー操作
- UIからロジックを呼び出すだけの処理
▼ モジュール名の例
mdlUIfrmMain(ユーザーフォームの場合)mdlView
▼ ポイント
UIはロジックやデータ処理とは切り離し、
「UIはイベントを受け取ってロジックを呼ぶだけ」に徹する構造が理想です。
5. 設定・定数モジュール(Config / Const)
プロジェクトで使う 定数 をまとめるモジュール。
▼ 主な内容
- ファイルパス
- シート名
- 固定メッセージ
- フラグ値
▼ モジュール名の例
mdlConfigmdlConstmdlSetting
▼ メリット
- 定数の変更を一か所で行える
- 他のコードを読みやすくできる(魔法の数字を排除)
6. モジュール構成の一例(業務プロジェクトの場合)
実務でよくあるプロジェクト構成の例です。
mdlMain … エントリーポイント(実行開始)
mdlCommon … 共通処理
mdlConfig … 定数
mdlData … シートデータ取得
mdlService … 業務ロジック
mdlUI … ボタン操作などのUI制御
frmInput … 入力用UserForm
▼ メリット
- モジュールの責務が明確
- 属人化が減る
- 新しく参加した人もどこに何があるか分かる
- バグ調査が速い
- 保守に強いプロジェクトになる
7. まとめ
モジュール単位で役割を分担すると、
- 処理の責務が明確になる
- 保守性が上がる
- プロジェクトが大規模化しても破綻しない
- 他者がコードを読みやすくなる
というメリットがあります。
コメント