モジュールの分割と再利用 ― 共通処理を別モジュールへ
VBA開発を進めていくと、「複数のプロシージャで同じ処理を何度も書いている」ことに気づきます。これは可読性・保守性の低下を招く典型パターンです。
そこで重要になるのが 共通処理のモジュール化 です。
この記事では、実務で必須となる「共通関数・定数をモジュールに分けて管理する方法」を詳しく解説します。
1. 共通処理を“まとめて管理”するメリット
処理を共通化して別モジュールに切り出すことで、以下のメリットがあります。
● メリット一覧
- 重複コードがなくなる(保守がラク)
- 修正が1ヶ所で済む(バグ修正も早い)
- プロシージャの見通しが良くなる
- 再利用性が高まる
- 他ブックへの移植が簡単になる
“同じ処理を見かけたら共通化” が基本です。
2. 共通関数用のモジュール作成ルール
実務では、モジュールを役割ごとに分割するのがおすすめです。
● よくあるモジュールの分け方
- modCommon:共通関数
- modConst:定数定義
- modUtil:メッセージ系やユーティリティ系
- modExcel:シート操作専用
- modDate:日付処理
- modString:文字列処理
プロジェクトが大きいほど、モジュール名で役割が分かるようにしておくことが重要になります。
3. 共通関数をモジュール化する実例
■ 例:よく使うTrim関数処理を共通化
Trim関数とは、列の先頭(左側)と末尾(右側)にある不要なスペース(空白文字)をすべて削除してくれる関数
複数のプロシージャで同じ処理を書くと、後々変更が大変になります。
● 悪い例
各プロシージャ内で毎回 Trim を書いている:
Dim name As String
name = Trim(Range("A1").Value)
● 良い例:共通モジュールに関数化
modCommon に関数を用意しておけば、どこでも呼び出せます。
'文字列を安全にTrimする(Nullやエラーにも対応)
Function SafeTrim(ByVal target As Variant) As String
If IsError(target) Then
SafeTrim = ""
Exit Function
End If
If IsNull(target) Then
SafeTrim = ""
Else
SafeTrim = Trim(CStr(target))
End If
End Function
使用側はシンプルになります:
Dim name As String
name = SafeTrim(Range("A1").Value)
これだけでコードが格段に読みやすくなり、変更にも強くなります。
4. 定数をモジュール化する(保守性が激変)
定数も専用モジュールで管理することで、メンテナンス性が大幅に向上します。
● 悪い例(あちこちに数値“直書き”)
Range("A1").Value = Range("A1").Value * 1.1 '消費税10%
● 良い例(modConstにまとめる)
Public Const TAX_RATE As Double = 0.1
Public Const MAX_ROWS As Long = 5000
Public Const APP_NAME As String = "売上管理システム"
使用箇所は:
Range("A1").Value = Range("A1").Value * (1 + TAX_RATE)
後で税率が変更になっても 1ヶ所の修正で済む ため、実務では強力な武器となります。
5. “Public” を使ってどこからでも呼べるようにする
共通モジュールに置いた関数・定数は、Public を付けることで他のモジュールから呼び出せるようになります。
例:
Public Function SafeTrim(ByVal target As Variant) As String
Public Const TAX_RATE As Double = 0.1
● Private にするのはいつ?
- そのモジュール内だけで使う処理
- 他の処理に影響させたくない内部関数
関数ごとに役割を意識すると、設計の質が上がります。
6. 共通モジュールの“作りすぎ”に注意
よくある失敗が、
「とりあえず何でも modCommon に入れる」
というケースです。
これでは共通モジュールが巨大化し、逆に探しづらくなります。
● 避けるべき状況
- 似た処理が複数のモジュールに分散
- 名前が曖昧で検索してもわからない
- “何でも詰め込んだ箱”になっている
● ベストプラクティス
- 役割ごとにモジュールを分ける
- 名前で内容が想像できるようにする
7. まとめ
共通関数・定数のモジュール化は、
VBAプロジェクトの保守性を大きく左右する重要ポイント です。
✔ ポイント
- 共通化すると保守が1ヶ所で済む
- モジュールは役割別に分ける
- 共通関数は Public で公開する
- 定数は専用モジュールで一元管理
- modCommon に詰め込みすぎない
実務でVBAを長く運用するには、「共通化」と「整理」が欠かせません。
コメント