VBAのプロシージャとは何か|SubとFunctionの違いと1本にまとめる実務の考え方

VBAの学習を始めると「プロシージャ」という言葉が頻繁に出てきます。難しそうに聞こえますが、実態は非常にシンプルです。この記事では、プロシージャの意味・SubとFunctionの違い・実務での使い方を解説します。

プロシージャとは何か?

プロシージャとは、VBAの処理をまとめておく「箱」のようなものです。次のコードを見てください。

Sub ShowMessage()
    MsgBox "こんにちは!"
End Sub

Sub ~ End Sub に囲まれた部分が1つのプロシージャです。マクロの記録で自動生成されるコードもこの形式です。

つまり「プロシージャ=マクロの本体」と理解しておけば十分です。

プロシージャを分けすぎない方がいい理由とは?

「処理ごとに細かくプロシージャを分けるべき」という説明を見ることがありますが、実務では1つにまとめた方が管理しやすいケースが多いです。

分けすぎると次の問題が起きます。

  • 呼び出しの順序管理が複雑になる
  • 他のプロシージャを見に行かないと全体が把握できない
  • エラーが起きた場所を追いにくくなる

たとえば次のように複数に分けた構成より…

Sub Main()
    Call Step1
    Call Step2
    Call 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プロシージャとSubプロシージャの違いとは?

Function は処理の結果を値として返せるプロシージャです。計算ロジックを関数として再利用したい場合に便利です。

' 消費税を加算するFunctionプロシージャ
Function AddTax(price As Double) As Double
    AddTax = price * 1.1
End Function

' Subから呼び出す例
Sub Sample()
    Dim total As Double
    total = AddTax(1000)
    MsgBox total  ' → 1100が表示される
End Sub

ただし Function を多用すると処理が分散して読みにくくなります。まずは Sub で完結させるのが基本で、同じ計算を複数箇所で使う場合だけ Function に切り出すのが実用的です。

まとめ

  • プロシージャ=マクロの入れ物Sub ~ End Sub が基本の形
  • 実務では1本のプロシージャにまとめる方が管理しやすいケースが多い
  • Function は値を返せるが、多用すると読みにくくなる。必要な場面だけ使う
  • 「分ける」より「読みやすく完結した1本を書く」ことを優先する
  • 「プロシージャ」に難しさを感じたら「マクロを入れる箱」と理解しておけばOK

よくある質問

SubとFunctionはどう使い分けますか?

処理の実行だけでよければ Sub、計算結果や文字列など値を返したい場合は Function を使います。9割の場面では Sub で完結できます。

プロシージャ名に使えない文字はありますか?

スペース・記号・VBAの予約語(IfFor など)は使えません。先頭は文字で始め、英数字とアンダースコアの組み合わせが基本です。日本語も使えますが、英語の方が一般的です。

Callを使ってプロシージャを呼び出す必要はありますか?

Call は省略できます。Call Step1Step1 はどちらも同じ動作です。引数がある場合は Call ありとなしで書き方が少し変わるため、一貫して Call を省略する書き方が現代的です。

1つのプロシージャが長くなりすぎたらどうすればいいですか?

100行を超えてきたら、処理の意味ごとに分割することを検討します。ただし「動いていて読める」なら分割しなくても問題ありません。分割する場合は処理の区切りにコメントで見出しを入れるだけでも可読性が上がります。

プロシージャはどのモジュールに書けばいいですか?

通常は標準モジュールに書きます。シートのイベント(セルをクリックしたとき等)に連動させたい場合はシートモジュール、ブックのイベント(開いたとき・閉じたとき等)に連動させたい場合は ThisWorkbook モジュールに書きます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール