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_Export | PDF・CSV・Excel出力に関する処理 |
| M_Import | ファイル読み込み・データ取り込みに関する処理 |
| M_Check | 入力チェック・バリデーションに関する処理 |
| M_Common | 複数のマクロから呼び出す共通処理 |
モジュール名は「M_」などのプレフィックスをつけると、VBEのプロジェクト一覧で見つけやすくなります。
命名ルールとコメントを整えるには?
マクロ名を見ただけで「何をする処理か」がわかるようにすることが、メンテナンス性を高める最大のポイントです。
命名の基本ルール:
- 動詞+対象 の形で命名する(例:
ExportPDF・ImportCSV・CalcSummary) - 「何をする」かが名前から読み取れるようにする
- 略語は使いすぎない(
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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



