VBAコード解説

【エクセルVBA初心者講座】別のプロシージャを呼び出すCallステートメント

プロシージャとcallステートメント

今回はプロシージャと、プロシージャから別のプロシージャを呼び出すCallステートメントについて説明します。

VBAの構文を書いていくためには、プロシージャの構造について知っておく必要があります。

プロシージャとは

プロシージャとはマクロの最小実行単位のことを指していて、モジュール内に作成されます。

VBAのプロシージャには大きく分けて、処理を実行するSubプロシージャと処理を実行した後に値を返すFunctionプロシージャの2つがあります。

ここでは一般的なSubプロシージャについて説明していきます。

マクロの最小実行単位 = プロシージャ

Subプロシージャ

モジュール内にVBAの命令文を以下のようにプロシージャとして作成します。

Sub test1()
    Range("A1").value = 10
End Sub

このようにSubプロシージャは「Sub マクロ名」で始まり、「End Sub」で終わります。

test1を実行することで、アクティブシートのセルA1に10が代入されます。

test1の実行結果
実行結果

他のプロシージャの呼び出し

一般的にプロシージャは一つずつ個別に実行されますが、他のプロシージャから呼び出して実行することも可能です。

呼び出されるプロシージャをサブルーチンといい、サブルーチンを呼び出すプロシージャを親プロシージャといいます。

親プロシージャ内にサブルーチン名(呼び出すプロシージャ名)を記載することで、サブルーチンを呼び出すことができます。

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が代入されます。

test1の実行結果
実行結果

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冊を紹介

続きを見る

-VBAコード解説