VBAでのプロシージャの基本
① プロシージャの基本的な概念と種類
VBAにおけるプロシージャは、特定のタスクを実行するためのコードのまとまりです。VBAで主に使われるプロシージャには、Sub
、Function
、Property
の3種類があります。
Sub
プロシージャは、特定の操作を行うコードを含み、値を返さないのが特徴です。
Function
プロシージャは、計算やデータ処理を行い、結果として値を返します。
引数の指定 | 戻り値の指定 | |
---|---|---|
Subプロシージャ | ||
Functionプロシージャ |
Property
プロシージャは、オブジェクトの特定のプロパティに値を設定したり、値を取得したりする際に使用されます。

ま、ただしPropertyは、めったに使いません。
② Subプロシージャの作成と実行
Subプロシージャの作成は、VBAエディタで Sub
キーワードを使用して行います。
例えば Sub Test()
と記述することで、Test
という名前のSubプロシージャが作成されます。
プロシージャ内には、VBAコードを記述して、特定のタスクを実行する命令を組み込むことができます。
実行するには、VBAエディタ内でプロシージャを選択し、実行ボタンをクリックするか、ショートカットキー(通常は F5)を使用します。
③ Functionプロシージャの利用と特徴
Functionプロシージャは、特定の計算を実行し、結果を返すために使用されます。
例えば、2つの数値を受け取り、それらの和を返すFunctionプロシージャは Function AddNumbers(number1 As Integer, number2 As Integer) As Integer
と定義できます。
このプロシージャは、2つの引数を受け取り、それらを加算して結果を返します。
Functionプロシージャは、値を必要とする場所で呼び出すことができます。
プロシージャの応用とイベント処理
① プロシージャとイベントの連携
VBAでは、プロシージャをイベントハンドラとして使用して、特定のイベントに応じた処理を実装することができます。
例えば、ワークシートがダブルクリックされたときにメッセージを表示するプロシージャは、Worksheet_BeforeDoubleClick
イベント内に記述します。
このように、イベントとプロシージャを連携させることで、ユーザーの操作に応じた動的なアプリケーションを作成できます。
② プロシージャの引数とパラメータの活用
プロシージャの引数は、プロシージャに与える入力値です。
引数には、値渡し(ByVal)と参照渡し(ByRef)の2種類の渡し方があります。
値渡しでは、引数の値のコピーがプロシージャに渡されるのに対し、参照渡しでは引数への参照が渡されます。
この違いにより、プロシージャが引数をどのように扱うかが決まります。



プロシージャを途中で抜ける方法
プロシージャを途中で抜ける場合、Exit Sub
やExit Function
を使います。
詳しくは以下をご覧ください。


サンプルコード
Subプロシージャの例
Subプロシージャは、特定の操作を実行するためのコードブロックです。値を返しません。
'プロシージャ1
Sub SayHello()
MsgBox "Hello, World!"
End Sub
'プロシージャ1を呼び出す
Sub CallSayHello()
SayHello
End Sub
Functionプロシージャの例
Functionプロシージャは、計算やデータ処理を行い、値を返します。
'プロシージャ1
Function AddNumbers(ByVal Number1 As Double, ByVal Number2 As Double) As Double
AddNumbers = Number1 + Number2
End Function
'プロシージャ1を呼び出す
Sub CallAddNumbers()
Dim result As Double
result = AddNumbers(10, 20)
MsgBox "The result is " & result
End Sub
上記の場合、「The result is 30」というメッセージボックスが表示されます。
Propertyプロシージャの例
Propertyプロシージャは、オブジェクトのプロパティにアクセスするために使用されます。
Private currentValue As Integer
Property Get CurrentValue() As Integer
CurrentValue = currentValue
End Property
Property Let CurrentValue(value As Integer)
currentValue = value
End Property
この例では、CurrentValue
というプロパティに対するGetおよびLetプロシージャを定義しています。Getプロシージャはプロパティの値を取得し、Letプロシージャはプロパティに値を設定します。