カテゴリ: Excel VBA 更新日: 2026/01/17

目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック

目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック
目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック

先生と生徒の会話形式で理解しよう

生徒

「先生、VBAでマクロを作っていたら、コードがどんどん長くなって自分でもどこに何を書いたか分からなくなってしまいました…。」

先生

「それは成長の証ですね!でも、一つの場所に全てを書き込むのは、大きな箱に洋服も書類も食器も全部詰め込むようなものなんです。」

生徒

「あ、まさにそんな感じです!どうすればスッキリ整理できますか?」

先生

「『モジュール分割』というテクニックを使いましょう。目的ごとに部屋を分ける感覚で整理すると、劇的に見やすくなりますよ!」

1. モジュール分割とは?

1. モジュール分割とは?
1. モジュール分割とは?

Excel VBAにおける「モジュール分割」とは、プログラムを機能や目的ごとに、複数の「標準モジュール」へ分けて管理することを指します。パソコンを触り始めたばかりの方に分かりやすく例えると、デスクトップにある大量のファイルを、種類ごとに「フォルダ」へ分けて入れる作業に似ています。

VBAのコード(プログラムの命令文)が数百行、数千行と増えていくと、後で修正したい場所を探すだけで一苦労です。そこで、あらかじめ「計算用の部屋」「印刷用の部屋」「データ保存用の部屋」というように分けておくことで、どこに何があるか一目で分かるようにします。この「部屋」がVBAではモジュールと呼ばれます。

2. なぜ分割が必要?整理するメリット

2. なぜ分割が必要?整理するメリット
2. なぜ分割が必要?整理するメリット

プログラムを分割して整理することには、見た目が綺麗になること以外にも重要なメリットが3つあります。

  • 保守性(ほしゅせい)の向上: 「保守」とは、後でプログラムを直したり点検したりすることです。部屋が分かれていれば、印刷の設定を直したい時に「印刷モジュール」だけを見れば良いので、他の場所を間違えて消してしまうリスクが減ります。
  • 再利用(さいりよう)が楽: 一度作った「消費税計算のプログラム」を別のExcelファイルでも使いたい時、専用のモジュールに分かれていれば、その部屋ごとコピーするだけで済みます。
  • チーム開発のしやすさ: もし他の人と一緒にマクロを作る場合、「私はこのモジュールを担当するね」と分担作業がスムーズになります。

プログラミング未経験の方は、まず「将来の自分が困らないための掃除」だと思って取り組んでみてください。

3. 理想的な分割の基準:機能・処理単位

3. 理想的な分割の基準:機能・処理単位
3. 理想的な分割の基準:機能・処理単位

では、どのように分割すれば良いのでしょうか?おすすめは「機能・処理単位」で分けることです。例えば、業務でよくある「売上データを集計してレポートを作るマクロ」なら、以下のように分割してみましょう。

モジュール名 役割・入れる内容
mdlMain マクロ全体の実行順序を決める「司令塔」
mdlImport 他のファイルからデータを取り込む処理
mdlCalc 合計や平均などの計算を行う処理
mdlFormat セルの色を変えたり、罫線を引いたりする見た目の処理
mdlCommon どのプログラムからも使われる共通の便利な道具

このように、「何をするための命令か」で名前を付けて分けるのがコツです。

4. 実践!司令塔と実務担当を分ける書き方

4. 実践!司令塔と実務担当を分ける書き方
4. 実践!司令塔と実務担当を分ける書き方

実際にプログラムを書いてみましょう。まずは「メイン(司令塔)」と「実際の作業(実務担当)」を分ける基本の形です。これを行うだけで、コードの読みやすさが格段に上がります。

【モジュール1:mdlMain】


' 全体の流れを管理するメインのプログラム
Sub StartProcess()
    ' ステップ1:準備
    Call ClearOldData
    
    ' ステップ2:実行
    Call InputHello
    
    MsgBox "全ての処理が終わりました!"
End Sub

【モジュール2:mdlTasks】


' 古いデータを消す実務担当
Sub ClearOldData()
    Range("A1").ClearContents
End Sub

' 挨拶を入力する実務担当
Sub InputHello()
    Range("A1").Value = "こんにちは、VBAの世界へ!"
End Sub

このように、Call という命令を使って他の場所にあるプログラムを呼び出すことで、メインのプログラムを見ただけで「どんな順番で何が起きるか」が分かるようになります。

5. 汎用的なパーツを「共通モジュール」にまとめる

5. 汎用的なパーツを「共通モジュール」にまとめる
5. 汎用的なパーツを「共通モジュール」にまとめる

どのマクロでも使うような「お決まりの処理」はありませんか?例えば、「特定のセルの文字を太字にする」とか「確認メッセージを出す」といった処理です。これらを「共通モジュール(mdlCommon)」にまとめておくと便利です。

料理に例えると、どんな料理にも使う「だし」や「ソース」をあらかじめ作り置きしておくようなものです。一度作っておけば、他のマクロを作る時も Call するだけで使い回せます。


' mdlCommon:どんな時でも使える共通パーツ
Sub SetHeaderStyle(targetRange As Range)
    ' 指定された範囲の背景を青、文字を白にする
    With targetRange
        .Interior.Color = vbBlue
        .Font.Color = vbWhite
        .Font.Bold = True
    End With
End Sub

このパーツを一つ作っておけば、売上表でも住所録でも、好きな場所でヘッダーのデザインを一瞬で整えることができます。

6. 分割したモジュールを呼び出す際のルール

6. 分割したモジュールを呼び出す際のルール
6. 分割したモジュールを呼び出す際のルール

モジュールを分割すると、「別のモジュールにあるプログラムを本当に呼び出せるの?」と不安になるかもしれません。基本的には Sub の前に Public(パブリック:公開という意味)と書くか、何も書かなければ、他のモジュールから呼び出すことが可能です。

逆に、そのモジュールの中でしか使わない、外から見られたくないプログラムには Private(プライベート:非公開という意味)と付けます。これは、家の「リビング」は誰でも入れるけれど、「寝室」は家族しか入らせない、という区別に似ています。

初心者のうちは、基本的には Sub だけで大丈夫ですが、大規模な開発ではこの区別が重要になってきます。

7. VBE(編集画面)でモジュールを整理・改名する方法

7. VBE(編集画面)でモジュールを整理・改名する方法
7. VBE(編集画面)でモジュールを整理・改名する方法

VBAの編集画面(VBE)で新しいモジュールを作るには、上のメニューの「挿入」から「標準モジュール」を選びます。すると「Module1」という名前が付きますが、これだと中身が分かりません。

名前を変えるには、左側の「プロジェクトエクスプローラー」で変更したいモジュールを選び、その下の「プロパティウィンドウ」にある「(オブジェクト名)」という場所を書き換えます。パソコンのファイル名を変えるのと同じ感覚で、mdl集計 のように役割を名前にしてあげましょう。

※日本語でも名前は付けられますが、プログラミングの世界では将来のトラブルを防ぐために mdlCalc のように半角英数字で付けるのが一般的です。

8. 整理整頓のタイミングと注意点

8. 整理整頓のタイミングと注意点
8. 整理整頓のタイミングと注意点

モジュールを分けるタイミングは、マクロを作り始める前でも、作った後でも構いません。おすすめは、「一つのモジュールが画面に入り切らなくなったら」です。何回もスクロールしないと下のコードが見えないようなら、それは分割のサインです。

ただし、細かく分けすぎると、今度は「どこに何があるか」が逆に分かりづらくなります。まずは「大きく3つ(メイン・実務・共通)」くらいに分けることからスタートし、自分が管理しやすい量を探ってみてください。

また、分割した際は Call で正しく繋がっているか、実行テスト(F5キーを押して動かしてみること)を忘れずに行いましょう。小まめに動かして確認するのが、エラーを最小限にする秘訣です。

9. 実際の実行結果のイメージ

9. 実際の実行結果のイメージ
9. 実際の実行結果のイメージ

モジュールを分割して実行しても、Excelのシート上での動きは一つのマクロとして動かした時と全く変わりません。しかし、マクロを実行した際の安心感や、エラーが起きた時の解決スピードは格段に上がります。


【実行結果のイメージ】
1. ボタンをクリック
2. 「データをクリアしました」というメッセージが出る
3. セルに新しいデータが入力される
4. 指定した範囲が綺麗なデザインに整えられる
5. 最後に「完了」の合図が出る

このように、裏側では複数のモジュールが連携して動いていますが、使う人(ユーザー)にとっては一つのスムーズな機能として提供されます。これがプログラミングにおける「美しい設計」の第一歩です。

カテゴリの一覧へ
新着記事
New1
Excel VBA
目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック
New2
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
New3
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
New4
Excel VBA
VBAクラスモジュールとは?メリットと基本的な使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
No.2
Java&Spring記事人気No2
Excel VBA
VBAクラスモジュールとは?メリットと基本的な使い方を初心者向けに解説
No.3
Java&Spring記事人気No3
Excel VBA
Excel VBAのプロジェクト構成とモジュール管理!標準・シート・ThisWorkbookの違い
No.4
Java&Spring記事人気No4
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
No.5
Java&Spring記事人気No5
Office Scripts
Office Scriptsの基本!Excel自動化で使うインターフェイスとスクリプト設計の考え方
No.6
Java&Spring記事人気No6
Office Scripts
Office Scriptsの基本!Excel自動化で学ぶエラーを防ぐ型チェックの活用方法
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAプロジェクトを整理する方法!保守しやすいフォルダ・命名規則まとめ
No.8
Java&Spring記事人気No8
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方