【Excel VBA】SubプロシージャとFunctionプロシージャの呼び出し方法

VBAのプロシージャの呼び出しは、一貫性がなくて慣れないうちは混乱するでしょう。特に引数をかっこで囲んだり、囲まなかったりするので余計に混乱します。か囲まないかこの記事では呼び出し方法を整理してマスターできるようにしたいと思います。

初めにSubプロシージャ呼び出し方を次に一覧します。

呼び出し方説明
Subプロシージャ名 引数1, 引数2引数をかっこで囲まない。
Call Subプロシージャ名(引数1, 引数2)Callステートメントを使う場合はかっこで囲む。
Subプロシージャの呼び出し方

Functionプロシージャは次の通りです。

呼び出し方説明
Functionプロシージャ名 引数1, 引数2戻り値を使用しない場合は、引数をかっこで囲まない。
Call Functionプロシージャ名(引数1, 引数2)戻り値を使用しない場合は、Callステートメント使って
呼び出すこともできる。引数はかっこで囲む。
Functionプロシージャ名(引数1, 引数2)戻り値を使用する場合は、引数をかっこで囲む。
Functionプロシージャの呼び出し方

この後は、それぞれの呼び出し方を注意点や実例を交えながら説明します。

目次

Subプロシージャを呼び出す

Subプロシージャを別のプロシージャから呼び出すには、プロシージャ名と必要な引数を記述します。Callステートメントは必須ではありませんが、使用する場合は引数をかっこで囲む必要があります。

プロシージャ名 引数リスト
Call プロシージャ名(引数リスト)

引数が複数ある場合はカンマ(,)で区切って指定します。

Sub main()
    addAndMsg 3, 5
End Sub

Sub addAndMsg(foo, bar)
    MsgBox foo + bar
End Sub

Functionプロシージャを呼び出す

Functionプロシージャ(関数)で戻り値を使用する場合、引数をかっこで囲んで呼び出す必要があります。

変数 = プロシージャ名(引数リスト)
Set 変数 = プロシージャ名(引数リスト)

Functionがオブジェクトを返す場合は、オブジェクト変数に代入するためにSetステートメントが必要です。

戻り値が使用しない場合は、Subプロシージャと同じ方法で呼び出すことも出来ます。

次の例は戻り値を直接MsgBox関数の引数に渡しています。

Sub main()
    MsgBox add(3, 5)
End Sub

Function add(foo, bar)
    add = foo + bar
End Function

引数の渡し方

引数はかっこで囲んだり、囲まなかったりしますが引数のリストの指定の方法に違いはありません。ここでは引数リストの仕方を解説します。

SubプロシージャやFunctionプロシージャに渡す引数のリストは、カンマ(,)で区切って指定します。引数を渡す順序は定義の順序通りに渡す必要があります。

例えば、MsgBox関数には1つ目の引数にメッセージ文字列、3つ目の引数としてダイアログボックスのタイトルを指定できます。2つ目の引数は省略可能ですが、省略した場合でもカンマは2つ必要です。

Sub sample()
    MsgBox "マクロ実行中です。", , "インフォメーション"
End Sub

名前付き引数

名前付き引数を使うと、必要な引数だけ、そして定義とは異なる順序でも引数を渡すことができます。名前付き引数は引数名との後ろに「:=」を記述し、その後に値を指定します。

引数名1:=値1, 引数名2:=値2, ...

前述のMsgBoxを呼び出す例を、名前引数を使って呼び出すと次のようになります。

Sub sample()
    MsgBox Prompt:="マクロ実行中です。", Title:="インフォメーション"
End Sub

このように必要な引数だけを渡して呼び出すことが出来ます。

まとめ

プロシージャの呼び出し方法は複数ありますが、いろいろな呼び出し方を混在させると混乱のもととなります。自分なりに首尾一貫した呼び出し方法を選択しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次