VBAマクロは1ブックに何個まで入れていい?管理しやすい構成と整理の目安

1つのブックに入れられるマクロの数に技術的な上限はありません。ただし、数が増えるほど管理が難しくなるため、実務では「1モジュール10〜15個・1ブック全体で50個前後」を目安に、モジュール分割と命名ルールで整理するのがおすすめです。

この記事では、次の内容を順番に解説します。

  • マクロの数に技術的な制限はあるか
  • マクロが増えすぎると起きる問題
  • モジュール分割で整理する方法
  • 命名ルールとコメントの付け方
  • 整理・分割のタイミングの判断基準

マクロの数に制限はあるのか?

技術的には、1つのブックにいくつでもマクロ(プロシージャ)を書けます。モジュール数にも明確な上限はなく、極端な話、数百個のSubを1つのブックに入れることも可能です。

Sub ExportPDF()
    ' PDF出力の処理
End Sub

Sub SendMail()
    ' メール送信処理
End Sub

Sub CalcSummary()
    ' 集計処理
End Sub

ただし、技術的に可能であることと、実務的に管理しやすいことは別の話です。数が増えるほどメンテナンス性は低下します。

実務での目安:

  • 1つの標準モジュールに10〜15個以内
  • 1ブック全体で50個前後まで

これを超えてくると「何がどこにあるか」がわかりにくくなり、修正や引き継ぎが困難になります。

マクロが増えすぎると起きる問題とは?

マクロの数が増えると、次のような問題が発生しやすくなります。

  • どのマクロが何をしているかわからなくなる:名前を見ても処理の内容が想像できないマクロが増える。
  • 同じ処理があちこちに重複する:「似たような処理を書いた覚えがあるけどどこだっけ」という状態になる。
  • 修正箇所を探すのに時間がかかる:バグが出ても、どのSubが原因かを特定するのが難しくなる。
  • 引き継ぎができない:他の人が開いても何をするブックかわからず、触れない状態になる。

特に避けるべきなのが、意味のない名前のマクロです。

' 避けるべき命名の例
Sub Macro1()
    ' 何をする処理なのかまったくわからない
End Sub

Sub test2()
    ' 本番で使っているのかテスト用なのかわからない
End Sub

モジュール分割で整理するには?

マクロが増えてきたら、役割ごとにモジュールを分けるのが最も効果的な整理方法です。VBEのプロジェクトエクスプローラーで右クリック→「挿入」→「標準モジュール」でモジュールを追加できます。

モジュール分割の例:

モジュール名入れるマクロの種類
M_Mainメインの処理(ボタンから呼び出すもの)
M_ExportPDF・CSV・Excel出力に関する処理
M_Importファイル読み込み・データ取り込みに関する処理
M_Check入力チェック・バリデーションに関する処理
M_Common複数のマクロから呼び出す共通処理

モジュール名は「M_」などのプレフィックスをつけると、VBEのプロジェクト一覧で見つけやすくなります。

命名ルールとコメントを整えるには?

マクロ名を見ただけで「何をする処理か」がわかるようにすることが、メンテナンス性を高める最大のポイントです。

命名の基本ルール:

  • 動詞+対象 の形で命名する(例:ExportPDFImportCSVCalcSummary
  • 「何をする」かが名前から読み取れるようにする
  • 略語は使いすぎない(Proc1 より PrintReport
' 良い命名の例
Sub ExportMonthlyReport()
    ' 月次レポートをPDFで出力する
End Sub

Sub ImportSalesData()
    ' 売上データをCSVから取り込む
End Sub

Sub CheckInputErrors()
    ' 入力内容のバリデーションを実行する
End Sub

コメントはSubの直上に「何をするSubか」を1行で書くだけでも大きく変わります。処理の中にも「なぜこう書いたか」を残しておくと、後から修正するときに迷いません。

整理・分割のタイミングをどう判断するには?

次のどれかに当てはまったら、整理・分割を検討するタイミングです。

  • 1つのモジュールのSubが15個を超えてきた
  • 「あのマクロどこだっけ」と探すのに30秒以上かかる
  • 同じような処理を2回以上書いた(共通処理に切り出すサイン)
  • 他の人に「このブックのマクロを説明して」と言われたとき、説明に詰まる

共通処理を切り出す例:

' 複数のマクロで使う「処理前の準備」を共通化する
Sub PrepareProcess()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
End Sub

Sub CleanupProcess()
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
End Sub

' 各マクロから呼び出す
Sub ExportMonthlyReport()
    Call PrepareProcess
    ' ... 処理内容 ...
    Call CleanupProcess
End Sub

まとめ

  • 技術的な上限はないが、実務では1モジュール10〜15個・1ブック50個前後が目安。
  • 増えすぎると「何がどこにあるかわからない」「重複処理が生まれる」「引き継ぎできない」問題が起きる。
  • モジュール分割:役割ごとに M_Main・M_Export などに分けると管理しやすくなる。
  • 命名ルール:「動詞+対象」で名前をつけ、Sub直上にコメントを1行入れる。
  • 整理のサイン:15個超・探すのに時間がかかる・同じ処理を2回書いた、が目安。

よくある質問

マクロが多いとファイルサイズは大きくなりますか?

なります。ただし、テキストベースのVBAコードはそれほど大きくならず、通常の業務マクロであれば数十〜数百KBの増加程度です。ファイルサイズより、処理速度やメンテナンス性の方が実務では問題になりやすいです。

1つのSubにどのくらいの行数を書いていいですか?

目安は50〜100行以内です。それを超えてきたら、処理を別のSubやFunctionに切り出して呼び出す形にしましょう。1つのSubが長くなると、どこで何をしているかが追いにくくなります。

モジュールを分けると呼び出しが複雑になりませんか?

なりません。VBA内では同じブックのモジュールであれば Call マクロ名 または マクロ名 だけで呼び出せます。モジュールをまたいでも書き方は変わりません。

不要になったマクロはどうすればいいですか?

削除するのが最もシンプルです。ただし「本当に使っていないか」の確認が取れない場合は、Subの先頭に ' を入れてコメントアウトし、しばらく様子を見てから削除する方が安全です。削除前にバックアップを取っておくことも忘れずに。

マクロを別のブックに移すにはどうすればいいですか?

VBEでモジュールを右クリック→「ファイルのエクスポート」で .bas ファイルとして書き出し、移動先のブックで「ファイルのインポート」で読み込めます。または、コードをコピーして貼り付けるだけでも移せます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール