【VBA】処理をサブルーチン化(部品化)してコードを整理する方法

目次

はじめに

VBAでマクロを作成していると、一つのプロシージャの中に何十行、何百行とコードが連なり、「どこで何をやっているのか分からない…」と、巨大な「スパゲッティコード」になってしまうことがあります。このようなコードは、後から修正したり、他の人が読んだりするのが非常に困難です。

この問題を解決する最も効果的な方法が、「サブルーチン化」です。一連の処理を、意味のあるかたまりごとに小さな独立したマクロ(サブルーチン)に分割し、メインのマクロからそれらを順番に呼び出すことで、コード全体の見通しを劇的に改善できます。

この記事では、VBAの処理をサブルーチンに分割し、Call ステートメントで呼び出す、プログラム構造化の基本的なテクニックを解説します。


処理をサブルーチン化するVBAサンプルコード

この例では、「レポートを作成する」という一連の処理を、以下の3つのサブルーチンに分割します。

  1. FormatReportHeader: ヘッダー(見出し)の書式を設定する。
  2. PopulateReportData: レポートのデータを書き込む。
  3. ApplyFinalTouches: 最終的な仕上げ(罫線など)を適用する。

そして、これらのサブルーチンを順番に呼び出す、メインの実行マクロ CreateReport を作成します。

完成コード

' === メインの実行マクロ ===
Sub CreateReport()
    ' 各サブルーチンを順番に呼び出す
    Call FormatReportHeader
    Call PopulateReportData
    Call ApplyFinalTouches
    
    MsgBox "レポートの作成が完了しました。", vbInformation
End Sub


' --- 以下、サブルーチン(部品化されたマクロ) ---

' Privateキーワードで、このモジュール内からのみ呼び出せるようにする
Private Sub FormatReportHeader()
    ' ヘッダーの書式設定
    With Worksheets("Sheet1").Range("B2")
        .Value = "月次売上レポート"
        .Font.Bold = True
        .Font.Size = 16
    End With
End Sub

Private Sub PopulateReportData()
    ' データの書き込み
    Worksheets("Sheet1").Range("B4").Value = "売上"
    Worksheets("Sheet1").Range("C4").Value = 150000
End Sub

Private Sub ApplyFinalTouches()
    ' 最終的な書式設定(罫線)
    Worksheets("Sheet1").Range("B2:C4").Borders.LineStyle = xlContinuous
End Sub

コードの解説

Sub CreateReport()

これが、ユーザーが最初に実行するメインの処理(親マクロ)です。このマクロの役割は、具体的な処理を行うことではなく、どのサブルーチンを、どの順番で実行するかを管理・制御することにあります。コードが処理の「目次」のようになり、全体の流れが非常に分かりやすくなります。

Call FormatReportHeader

Call は、他のプロシージャ(この場合は FormatReportHeader というサブルーチン)を呼び出すためのステートメントです(Call は省略可能ですが、呼び出しであることが明確になるため、記述することが推奨されます)。

Private Sub ...

サブルーチンの宣言に Private キーワードを付けているのがポイントです。

  • Public Sub (または単に Sub): ブック内のどのモジュールからでも呼び出せる、公開されたマクロ。
  • Private Sub: そのコードが書かれているモジュール内からのみ呼び出せる、非公開のマクロ。

サブルーチンは、あくまでメインマクロの「部品」であり、ユーザーが直接実行するものではないため、Private に設定しておくことで、Excelの「マクロ」ダイアログの一覧に表示されなくなり、誤操作を防ぐことができます。


サブルーチン化のメリット

  • 可読性の向上: コードが「見出し作成」「データ入力」といった意味のある単位で分割されるため、目的の処理がどこに書かれているかを見つけやすくなります。
  • 保守性の向上: 例えば、ヘッダーの書式だけを変更したい場合、FormatReportHeader の中だけを修正すればよく、他の部分への影響を心配する必要がありません。
  • 再利用性の向上: FormatReportHeader のような部品は、他のレポート作成マクロからも再利用できる可能性があります。

まとめ

今回は、VBAの処理をサブルーチンに分割して、コードの構造を整理する方法を解説しました。

  • 一連の処理を、意味のある単位で小さな Private Sub に分割する。
  • メインとなる Public Sub から、Call ステートメントでそれらを順番に呼び出す。

最初は少し面倒に感じるかもしれませんが、この「部品化」の考え方を身につけることは、複雑な処理を扱う、より高度なマクロ開発への第一歩となります。ぜひ、ご自身のコードのリファクタリング(改善)に役立ててみてください。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次