Excel VBAの世界では、「プロシージャ」という言葉は頻出です。ですがその実態は、あくまで「1つのマクロ=1つのプロシージャ」という構造で十分に活用できる、基本的な“枠”にすぎません。
今回は「プロシージャとは何か?」という疑問に対して、必要以上に分けすぎず、シンプルに1つのマクロとして使う前提で解説していきます。
プロシージャとは?簡単に言うと「マクロの本体」
まずは定義からお伝えするとプロシージャ(Procedure)とは、VBAの処理をまとめておく“箱”のようなものです。
次のようなコードを見たことがある方も多いと思います。
Sub ShowMessage()
MsgBox "こんにちは!"
End Sub
この Sub ~ End Sub に囲まれた部分が、プロシージャです。Excelの「マクロの記録」で生成されるのも、この形式です。
つまり、「プロシージャ」=「マクロ本体のこと」と理解しておいて問題ありません。
プロシージャを分けすぎない方がいい理由
VBAの学習本などでは「プロシージャを処理ごとに細かく分けるべき」という説明がされていることがあります。ですが、実務でマクロを使う場面では、できる限り1つのプロシージャにまとめておいた方が管理しやすいというケースが多くなります。
なぜ分けすぎると困るのか?
- 呼び出しの順序管理が面倒になる
- 他のプロシージャの中身を見にいかないと、何をしているかわからない
- どこでエラーが起きているのか追いにくくなる
たとえば次のような構成だと、実務で扱うには複雑すぎることがあります。
Sub Main()
Call Step1
Call Step2
Call Step3
End Sub
Sub Step1()
' シート切り替えなど
End Sub
Sub Step2()
' データ集計
End Sub
Sub Step3()
' 出力
End Sub
これを以下のように1本にまとめると、全体が見通せてわかりやすくなります。
Sub DoAll()
' シート切り替え
Sheets("売上").Select
' データ集計
Dim i As Long
Dim total As Double
total = 0
For i = 2 To 10
total = total + Cells(i, 2).Value
Next i
' 出力
Sheets("集計").Range("A1").Value = total
MsgBox "完了しました"
End Sub
このように「読みやすく」「完結していて」「あとから修正しやすい」形の方が、結果的に長く使えるマクロになります。
Functionプロシージャの扱い方(必要なときだけ)
Functionプロシージャとは、処理の結果を値として返すための構文です。関数的に使える便利さはありますが、使いどころは限定的です。
たとえば、消費税を加算する関数は次のように書けます。
Function AddTax(price As Double) As Double
AddTax = price * 1.1
End Function
これをマクロ内で使うこともできます。
Sub Sample()
Dim total As Double
total = AddTax(1000)
MsgBox total
End Sub
ただし、Functionを多用すると処理が分散して読みにくくなるため、まずはSubで完結させるのが基本です。
まとめ:プロシージャ=マクロの入れ物と考えよう
- VBAでは、マクロ本体を「プロシージャ」と呼ぶ
- 基本的には
Sub ~ End Subで構成される - 処理は1本にまとめて書いた方が、実務では管理しやすい
- Functionは値を返すが、必要なときだけでOK
プロシージャを“分ける”ことよりも、“理解しやすいマクロを1本書く”ことを優先する方が、現場では役立ちます。
「プロシージャとは何か?」に悩んだら、まずは「マクロを入れる箱」くらいに捉えて、深く考えすぎずに書き始めてみましょう。
