【VBA】共通関数・定数のモジュール化|再利用性を高める設計と分割方法

モジュールの分割と再利用 ― 共通処理を別モジュールへ

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を長く運用するには、「共通化」と「整理」が欠かせません。

コメント

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