VBA 手続き(Procedure)

プロシージャ

VBA(Visual Basic for Applications)において「手続き(Procedure)」は、特定の処理をまとめて再利用可能にしたコードのブロックを意味します。手続きには主に Sub(サブプロシージャ)Function(関数プロシージャ) の2種類があり、どちらもプログラムの構造を明確にし、保守性・再利用性を高めるために重要です。

以下では、VBAの手続きについて、SubFunction の違い・使い方・特徴・応用まで、詳細に説明します。


◆ 1. 手続きとは?

手続きは、一連の処理をまとめたコードのまとまりで、名前をつけて定義され、必要なときに呼び出して実行することができます。

手続きを使う目的

  • 処理をモジュール化して見やすく整理
  • 同じ処理を繰り返し使える
  • プログラムの保守性が高まる
  • バグの発見や修正が容易

◆ 2. Sub(サブプロシージャ)

基本構文

Sub 手続き名()
' 実行したい処理
End Sub

Sub あいさつ()
MsgBox "こんにちは!"
End Sub

この手続きを呼び出すと、メッセージボックスが表示されます。

引数付きのSub

Sub 表示メッセージ(メッセージ As String)
MsgBox メッセージ
End Sub

呼び出し例:

Call 表示メッセージ("お疲れさまです!")

Call は省略可能です。


◆ 3. Function(関数プロシージャ)

FunctionSub と違い、「戻り値(結果)」を返すことができます。セル関数のように使えるのが特徴です。

基本構文

Function 関数名(引数 As データ型, ...) As 戻り値の型
' 処理
関数名 = 戻り値
End Function

Function 足し算(a As Double, b As Double) As Double
足し算 = a + b
End Function

呼び出し例(Sub内で):

Sub テスト()
Dim 結果 As Double
結果 = 足し算(5, 3)
MsgBox 結果 ' 8 と表示
End Sub

また、この 足し算 関数はセル関数としても使用可能:

=足し算(5, 3)

◆ 4. SubとFunctionの違い

項目SubFunction
戻り値なしあり(値を返す)
呼び出し方Call または 省略可能戻り値を変数で受け取る
使用目的動作を実行(メッセージ表示など)計算や値の返却(関数的処理)
セルでの使用×○(セル関数として使える)

◆ 5. ByVal と ByRef(引数の受け渡し)

ByVal(値渡し)

引数の値のコピーを渡す。呼び出し元の変数は変更されない。

Sub 変更不可(ByVal x As Integer)
x = x + 1
End Sub

ByRef(参照渡し)

引数そのものを渡す。呼び出し元の変数も変更される。

Sub 変更可(ByRef x As Integer)
x = x + 1
End Sub

◆ 6. 手続きのスコープ(Public / Private)

手続きの宣言方法によって、呼び出せる範囲(スコープ)が変わります。

宣言説明
Public他のモジュールからも呼び出せる
Private定義したモジュール内でのみ有効
Public Sub 全体から使える処理()
MsgBox "Public"
End Sub

Private Sub モジュール内専用処理()
MsgBox "Private"
End Sub

◆ 7. ネスト(手続きの中に手続きは不可)

VBAでは、SubやFunctionの中に別の手続きを定義することはできません。すべて独立して定義する必要があります。


◆ 8. エラー処理と組み合わせた例

Sub 割り算(ByVal x As Double, ByVal y As Double)
On Error GoTo エラー
MsgBox x / y
Exit Sub
エラー:
MsgBox "エラーです:" & Err.Description
End Sub

◆ 9. Functionで複数値を返す方法

戻り値が1つに限定されるため、配列やユーザー定義型、ByRef を使って複数の情報を渡すことが可能です。

Function 二乗と三乗(x As Double, ByRef 二乗 As Double, ByRef 三乗 As Double)
二乗 = x ^ 2
三乗 = x ^ 3
End Function

呼び出し:

Sub テスト()
Dim x2 As Double, x3 As Double
Call 二乗と三乗(2, x2, x3)
MsgBox "二乗:" & x2 & ", 三乗:" & x3
End Sub

◆ まとめ

ポイント内容
Sub処理を実行する手続き。戻り値はない
Function処理の結果(戻り値)を返す関数型の手続き
引数の使い方ByVal(値渡し)、ByRef(参照渡し)
スコープPublic/Privateで手続きの公開範囲を制御
セル関数としての利用Functionのみ可
再利用性の向上・コードの整理手続きを分けて管理することでメンテナンスがしやすくなる
タイトルとURLをコピーしました