【VBA】他ファイルでの再利用のコツ|共通モジュール化と移植しやすいコード設計

VBAモジュールを「使い回す」ためには、再利用しやすい書き方と、他ファイルへの移植のしやすさが非常に重要です。
ここでは、実務での標準化・部内共有・複数ブックでの使い回しを見据えた再利用のポイントを整理します。


スポンサーリンク

1. 汎用モジュール(共通モジュール)を作る

複数のファイルで使う可能性が高い処理は、
**「共通モジュール(Common / Util / Helper など)」**として切り出して保管しておくのがベスト。


◆ 例:共通化しやすい処理

  • 今日の日付を返す
  • ログを書き込む
  • メッセージボックスのテンプレ
  • ファイルパス系の取得
  • エラー処理(Try風の仕組み)
  • 配列や辞書の初期化・検索
  • シート存在チェック
  • テーブル存在チェック

これらはどのプロジェクトでもほぼ使うため、
一度作っておけばコピペだけで他プロジェクトへ移植できるようになります。


スポンサーリンク

2. パスやシート名など「環境依存の情報」を外に出す

再利用を妨げる最大の要因が、
**固定文字列のベタ書き(ハードコーディング)**です。


❌ ダメな例

Worksheets("売上データ").Range("A1")

他のファイルで使えません。


✅ 良い例

Const SHEET_SALES As String = "売上データ"
Worksheets(SHEET_SALES).Range("A1")

→ シート名だけ直せば、他のブックに流用できる。


◆ 推奨パターン:設定情報をまとめたモジュールを作る

例:Config.bas のようなモジュールにすべてまとめて管理

  • シート名
  • テーブル名
  • フォルダパス
  • 担当者名や部署名
  • APIキー(暗号化して管理)など

→ モジュールを流用するときは、この Config.bas だけ上書きすればOK。


スポンサーリンク

3. できるだけ「引数」で渡せる形にする

関数やサブルーチンを他ファイルで使う場合、
直接セルを操作するコードは流用性が低くなります。


❌ ダメな例:中でセルを操作してしまう

Sub WriteToday()
    Range("A1").Value = Date
End Sub

他のプロジェクトでは A1 に書きたくない場合も多い。


✅ 良い例:必要な値は全て「外部から渡す」

Sub WriteToday(targetCell As Range)
    targetCell.Value = Date
End Sub

→ どのファイルでも、どのシートでも使い回せる。


スポンサーリンク

4. 依存モジュールをまとめて輸出できる形にする

他ブックで使う時は、**VBAエクスポート(.bas / .cls)**が便利。
自分専用の「部品セット」を作っておくと仕事が速くなる。


◆ 推奨フォルダ構成例(個人の資産として管理)

/VBA-Library/
 ├ common.bas     (共通関数)
 ├ fileUtil.bas   (ファイル操作)
 ├ sheetUtil.bas  (シート操作)
 ├ tableUtil.bas  (テーブル操作)
 └ config_sample.bas(設定ひな形)

必要な時に 必要なモジュールだけインポートするだけで即利用可能

GitHub などでバージョン管理してもOK。


スポンサーリンク

5. 名前の衝突を避ける「接頭辞」ルールを決める

他ファイルへコピーするときに問題になりやすいのが、

  • 同名の関数
  • 同名の定数
  • 同名の変数
  • 同名のモジュール

これらが既存コードとぶつかることです。


◆ 誰でもできる簡単ルール

  • 共通関数は Util_ から始める
  • 日付関数は Date_
  • 変換系は Conv_
  • 条件チェックは Is_

例:名前衝突を避ける書き方

Function Util_GetToday() As Date
    Util_GetToday = Date
End Function

→ 他ファイルに同名の関数がある確率を大幅に減らせる。


スポンサーリンク

6. 説明コメント(Docコメント)を最小限で入れる

再利用のとき、結局読むのは「過去の自分」。

最低限以下の情報を書いておくと、流用時に迷わない。


推奨コメントテンプレ

'-----------------------------------------
' 機能    :日付を書き込む
' 引数    :targetCell - 書き込み先
' 戻り値  :なし
' 注意点  :セル以外を渡すとエラー
'-----------------------------------------

→ 他ファイルで流用するときのチェックが速くなる。


スポンサーリンク

7. まとめ:再利用の質を上げる6つのポイント

  1. 共通モジュールとして切り出す
  2. ハードコーディングを排除し設定化
  3. 値はできるだけ引数で受け取る
  4. モジュール単位で輸出・保管する
  5. 名前衝突を避ける命名規則を決める
  6. 最低限のDocコメントを残す

これらを意識するだけで、VBAの再利用率が劇的に向上し、作業効率が何倍にもなります。

コメント

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