今回はプロシージャと、プロシージャから別のプロシージャを呼び出すCallステートメントについて説明します。
VBAの構文を書いていくためには、プロシージャの構造について知っておく必要があります。
プロシージャとは
プロシージャとはマクロの最小実行単位のことを指していて、モジュール内に作成されます。
VBAのプロシージャには大きく分けて、処理を実行するSubプロシージャと処理を実行した後に値を返すFunctionプロシージャの2つがあります。
ここでは一般的なSubプロシージャについて説明していきます。
マクロの最小実行単位 = プロシージャ
Subプロシージャ
モジュール内にVBAの命令文を以下のようにプロシージャとして作成します。
Sub test1()
Range("A1").value = 10
End Sub
このようにSubプロシージャは「Sub マクロ名」で始まり、「End Sub」で終わります。
test1を実行することで、アクティブシートのセルA1に10が代入されます。
他のプロシージャの呼び出し
一般的にプロシージャは一つずつ個別に実行されますが、他のプロシージャから呼び出して実行することも可能です。
呼び出されるプロシージャをサブルーチンといい、サブルーチンを呼び出すプロシージャを親プロシージャといいます。
親プロシージャ内にサブルーチン名(呼び出すプロシージャ名)を記載することで、サブルーチンを呼び出すことができます。
Callステートメント
先ほど説明した「プロシージャから他のプロシージャから呼び出して実行する」際にはCallステートメントを使用します。
以下では親プロシージャである「test1」の中に、サブルーチン「test2」を記載しています。
これにより、test1からtest2を呼び出して実行することができます。
Sub test1()
Range("A1").value = 10
Call test2
End Sub
Sub test2()
Range("B1") = Range("A1") * 2
End Sub
test1を実行することで、セルA1に10が代入された後にtest2が呼び出され、セルB1に10×2の20が代入されます。
Callは省略可能ですが、他のプロシージャを呼び出していることを明確にするためにも、記述した方がおすすめです。
次のように書いても上と同様の結果を得ることができます。
Sub test1()
Range("A1").value = 10
test2 'Callを除いた
End Sub
Sub test2()
Range("B1") = Range("A1") * 2
End Sub
プロシージャ/Callステートメントのおさらい
- プロシージャを大別すると、SubプロシージャとFunctionプロシージャに分けられる
- SubプロシージャはVBAの命令文を実行するために必要
- Callステートメントで、プロシージャから他のプロシージャから呼び出して実行することができる
- Callは省略可能
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る