Excel VBA入門:マクロ・プロシージャ・モジュールの違いを徹底解説

Excel Visual Basic for Applications(VBA)は、Excelに搭載された強力なプログラミング言語です。VBAを使えば、日々の定型作業の自動化や独自関数の作成など、スプレッドシートの可能性を大きく広げられます。VBA学習の第一歩として、「マクロ」「モジュール」「プロシージャ」という3つの基本用語を正しく理解することが欠かせません。これらは互いに密接に関連していますが、それぞれ役割が異なります。
本記事では、マクロ・プロシージャ・モジュールの違いを、具体例と実践的なTipsとともにわかりやすく解説します。
記事の内容を試すには、Excel 2007以降のバージョンで「開発」タブを有効にしておく必要があります。
- 「開発」タブが表示されていない場合は、ファイル >> オプション >> リボンのユーザー設定 を開き、右側の一覧で開発にチェックを入れましょう。
1. マクロとは?
マクロは、VBAにおける最も取っつきやすい入り口です。セルの書式設定や数式の挿入といった繰り返し作業を自動化するための「命令の集まり」であり、Excelのマクロ記録機能を使えば、プログラミングの知識がなくても作成できます。記録機能はユーザーの操作をそのままキャプチャし、VBAコードへと変換してくれます。
実際のところ、「マクロを記録した」「マクロを書いた」というとき、多くの場合はモジュール内に保存されたSubプロシージャを指しています。Excelのマクロ記録機能は、自動的にSubプロシージャを生成する仕組みだからです。
マクロの主な特徴:
- 目的: 作業の自動化による時間の節約。たとえば、ワンクリックでデータの並べ替え、フィルター適用、レポート生成などを行えます。
- 作成方法:
- 記録: 単純な作業ならマクロ記録機能で手軽に作成可能。
- 記述: 複雑なロジックが必要な場合は、VBEでコードを直接編集・記述します。
- 保存場所: 通常はブック内に保存され、ボタンやショートカットキー、「マクロ」ダイアログから実行できます。
- 注意点: 記録したマクロには不要なコード(セルの選択操作など)が含まれがちで、セル参照も複雑になりやすいため、後から手動で整理するのが一般的です。
マクロ ≠ VBA: VBAはプログラミング言語そのものです。一方、マクロはVBAを使って(または記録によって)作られた、実行可能な自動化処理を指します。
実践例:簡単なマクロを作成して実行する
- 開発タブ >> マクロの記録 をクリックします。
- マクロ名に ApplyFormat(スペースは使えません)と入力し、必要ならショートカットキーを設定して >> OK をクリックします。

- 記録したい操作を行います:
- 見出し行を選択
- ホームタブ >> 太字 をクリック
- 塗りつぶしの色とフォントの色を設定
- 開発タブ >> 記録終了 をクリックして記録を停止します。

裏側では、Excelが次のようなVBAコードを自動生成しています。
Sub ApplyFormat()
'
' ApplyFormat Macro
'
' Keyboard Shortcut: Ctrl+Shift+F
'
Range("A1:G1").Select
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
End Sub
- これはSub(サブルーチンの略)であり、プロシージャの一種です。

マクロを実行する:
- 開発タブ >> マクロ をクリック
- ApplyFormat を選択 >> 実行 をクリック
- または Ctrl+Shift+F を押してもOKです。

これで、コーディングの専門知識がなくても、マクロを使った素早い自動化ができるようになります。
2. プロシージャとは?
プロシージャはVBAにおける最も基本的な単位で、特定のタスクを実行するコードのかたまりです。「実行するとExcelが従う一連の指示」と考えるとよいでしょう。実際のロジックが存在する場所であり、他のプログラミング言語でいう関数やメソッドに相当します。
プロシージャの主な特徴:
- 種類:
- Subプロシージャ: 処理を実行するだけで値を返しません。VBAの文脈で「マクロ」と呼ばれるのは、ほぼこのSubプロシージャのことです。
Subで始まりEnd Subで終わります。 - Functionプロシージャ: 計算を行い値を返します。
Functionで始まりEnd Functionで終わります。ワークシート上で独自関数として使えるのが大きな魅力です。
- Subプロシージャ: 処理を実行するだけで値を返しません。VBAの文脈で「マクロ」と呼ばれるのは、ほぼこのSubプロシージャのことです。
- 目的: 再利用可能なコードを作ること。ループ、条件分岐、変数、さらにセルやグラフなどのExcelオブジェクトとのやり取りも含められます。
- スコープ: Public(どこからでもアクセス可能)かPrivate(同一モジュール内のみ)を指定できます。
- 引数: 入力値(引数)を受け取れるため、柔軟な設計が可能です。
実践例:SubプロシージャとFunctionプロシージャの比較
- 開発タブ >> Visual Basic をクリック(または Alt+F11)
- VBEで 挿入 >> 標準モジュール を選択します。
Subプロシージャ(マクロのようなもの):
Sub ClearFormatting()
Range("A1:G1").ClearFormats
MsgBox "Formatting is cleared"
End Sub
- このコードを実行すると書式がクリアされ、「Formatting is cleared」というメッセージが表示されます。

Functionプロシージャ:
Function Multiply(num1 As Integer, num2 As Integer) As Integer Multiply = num1 * num2 End Function
- ワークシートのセルに =Multiply(E2,F2) のように入力すれば、値同士を掛け算できます。

マクロとの関係: すべてのマクロはSubプロシージャですが、すべてのSubプロシージャが記録されたマクロというわけではありません。記録以上の高度な処理を行うSubプロシージャを自作することもできます。
構造化された再利用可能なコードが必要な場面ではプロシージャを活用しましょう。複雑なタスクは複数のプロシージャに分割すると、コードの見通しが格段に良くなります。
3. モジュールとは?
モジュールは、1つ以上のプロシージャを格納する「入れ物」です。VBEの中でVBAコードを記述・管理するファイルのようなものであり、コードを整理整頓し、再利用しやすくするフォルダのような役割を果たします。
モジュールの種類:
- 標準モジュール: 最も一般的なモジュールで、汎用的なコードを記述します。
- VBEのプロジェクトエクスプローラーには「Module1」「Module2」などの名前で表示されます。
- VBEを開き >> 挿入 >> 標準モジュール で追加できます。
- ブックモジュール(ThisWorkbook): ブックのイベント(開いたとき、閉じる直前など)に連動するコードを格納します。
- ブックを開く・閉じるといった操作に反応するイベントプロシージャを置けます。
- ワークシートモジュール(Sheet1、Sheet2など): 特定のシートに紐づく特殊なモジュールです。
- シートへのクリックや変更などの操作に反応するイベントプロシージャを含みます。
- クラスモジュール: カスタムオブジェクトを作成するための上級者向けモジュールです。オブジェクト指向プログラミング(独自クラスの作成など)に使われますが、入門段階では不要です。
- UserFormモジュール: 独自のダイアログボックスをデザインするために使用します。

実践例:モジュールを使ってみる
- 開発タブ >> Visual Basic をクリック(または Alt+F11)
- プロジェクトエクスプローラー(左ペイン)で以下を操作:
- 対象のブックを右クリック >> 挿入 >> 標準モジュール を選択

- 次のプロシージャをコピー&ペーストします:
Sub FormatSalesReport()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ws.Range("A1:H1").Font.Bold = True
ws.Range("A1:H" & lastRow).Borders.LineStyle = xlContinuous
Dim i As Long
For i = 2 To lastRow
If ws.Cells(i, "H").Value > 100 Then ws.Cells(i, "H").Interior.Color = RGB(0, 255, 0)
Next i
End Sub
- このVBAコードはデータに書式を適用し、H列で100より大きい値を持つセルを緑色で強調表示します。
- ブックを保存します。
- これで、このプロシージャはマクロとして利用可能になります。
- F5 キーを押すか、実行ボタンをクリックしましょう。

マクロおよびプロシージャとの関係:
- モジュールはプロシージャを保持します
- マクロとは、モジュール内に保存されたSubプロシージャのことです
- 「モジュールなしのマクロ」は存在しません。すべてのVBAコードは何らかのモジュールの中に存在するためです。
使いどころ: あらゆるVBAプロジェクトで使用します。小規模なタスクなら1つのモジュールで十分ですが、大規模になるほど複数のモジュールに分割して散らかりを防ぎましょう。
三者の関係性:マクロ → プロシージャ → モジュール
マクロは、Subプロシージャに対するユーザー向けの呼び名です。プロシージャはコードのかたまりであり、モジュールはそれらを整理するためのグループです。
ワークフロー例:
- マクロを記録 → 新しいモジュール(多くの場合「Module1」)にSubプロシージャが自動生成される
- 生成されたプロシージャを編集して洗練させる
- 同じモジュールにプロシージャを追加するか、新しいモジュールを作成する

ベストプラクティスと実践的なヒント
- 命名規則:
Sub Macro1()のような名前ではなく、Sub CalculateTotalSales()のように内容が伝わる名前を付けましょう。スペースは避け、CamelCase(先頭大文字の連結)を使うのがおすすめです。 - エラー処理: プロシージャに On Error Resume Next や On Error GoTo ErrorHandler を組み込むと、予期しないエラーにも強くなります。
- セキュリティ: マクロは任意のコードを実行できるため、信頼できる発行元のものだけを有効化しましょう(ファイル >> オプション >> セキュリティセンター >> マクロの設定)。
- デバッグ: VBEでは F8 キーでコードを1行ずつステップ実行できます。
- 上級テクニック: モジュールをエクスポート(.basファイル)しておけば、別のブックでもコードを再利用できます。
- よくある混同: ExcelのマクロとOffice Scripts(新しいExcelで採用されているJavaScriptベースの技術)は別物です。デスクトップ版での自動化においては、VBAの方が高機能です。
まとめ
本記事では、Excel VBAの重要用語である「マクロ」「プロシージャ」「モジュール」の違いを解説しました。これらの概念を正しく理解することで、VBAドキュメントの読みこなしや他のExcelユーザーとのコミュニケーションがスムーズになり、コードの整理も格段にしやすくなります。まずはマクロの記録から始めてプロシージャの動きを観察し、プロジェクトが大きくなるにつれてモジュールで整理する習慣をつけましょう。自分のスプレッドシートで簡単なタスクの自動化に挑戦すれば、VBAの真の力を実感できるはずです。
-
Excelでデータを非表示にする6つの簡単な方法
Excelを使っていると、不要なデータを一時的に隠して、必要な情報だけを見やすく整理したい場面がよくあります。データを非表示にすることで、スプレッドシート全体がすっきりと整い、プレゼンテーションや資料作成の際にも見栄えが大きく向上します。この記事では、Excelでデータを非表示にする6つの方法を、手順付きでわかりやすく解説します。 Excelでデータを非表示にする6つの方法 ここでは、以下の6つの方法を順番に紹介します。 方法1:「非表示」コマンドを使う 方法2:セルの書式設定(フォント色)を活用する 方法3:「フィルター」コマンドを使う 方法4:「詳細フィルター」コマンドを使う 方法5:「
-
Microsoft Officeの「この製品のライセンスを確認できません」エラーを修正する方法
この記事では、「Microsoft Officeはこの製品のライセンスを確認できません(Microsoft Office cannot verify the license for this product)」というエラーを解決するための対処法を詳しくご紹介します。このエラーは、Word、Excel、PowerPoint、Outlookなど、どのOfficeアプリケーションでも発生する可能性があります。Microsoft Officeは、表計算やドキュメントの作成・管理、メールの送受信などをサポートする強力なソフトウェアスイートですが、このエラーが発生するとOfficeアプリケーションにアクセ