Callステートメント
こちらでは、エクセルVBAのSubプロシージャ、Functionプロシージャ、組み込み関数などを呼び出すCallステートメントについて解説しています。
ステートメントとは、「命令文」と訳されるように、コンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
- Callステートメントとは
- Callステートメントの基本形サンプルコード
- Callステートメントの省略形サンプルコード
- Callステートメントで引数を設定したサンプルコード
- Callステートメントで戻り値を設定したサンプルコード
Callステートメントとは
Callステートメントは、他のSubプロシージャやFunctionプロシージャなどを呼び出して制御を渡すフロー制御ステートメントです。Callを省略して呼び出すことは可能ですが、別のプロシージャを呼び出していることが分かりますので、メンテナンスも考慮して明記するようにしましょう。
Call プロシージャ名
プロシージャ名
構文 | [Call] name [argumentlist] | |
---|---|---|
キーワード | 省略 | 説明 |
Call | ● | Callステートメントを省略し、プロシージャを呼び出すこともできます。その際は、引数リストを囲む括弧も省略しなければなりません。また、Callステートメントで値を返すプロシージャを呼び出しても、返り値を取得することはできません。Call構文で組み込み関数またはユーザー定義型関数を呼び出す場合も同様にその関数の戻り値を取得することはできません。返り値を取得する場合は、Callステートメントを省略して取得します。 |
name | × | 呼び出すプロシージャの名前を指定します。 |
argumentlist | ● | プロシージャに引き渡す引数を設定します。変数、配列、式のいずれかを指定します。複数指定する場合は、カンマ (,) で区切ります。また、argumentlistを指定する場合は、引数を括弧で囲む必要があります。 |
Callステートメントの基本形サンプルコード
Sub sample1()
Call msg1
End Sub
Sub msg1()
MsgBox "Callステートメントを明記した基本形になります。"
End Sub
実行結果
メッセージボックスに「Callステートメントを明記した基本形になります。」が表示される。
解説
呼び出し先sample1と呼び出し元msg1のSubステートメントには引数の設定をしていません。次にCallステートメントを明記して、msg1プロシージャを実行しています。msg1プロシージャにはMsgBox関数が利用されているので、メッセージボックスに「Callステートメントを明記した基本形になります。」を表示させます。
最後はEndステートメントを利用してsample1プロシージャを終了させます。
Callステートメントの省略形サンプルコード
Sub sample2()
msg2
End Sub
Sub msg2()
MsgBox "Callステートメントの省略形になります。"
End Sub
実行結果
メッセージボックスに「Callステートメントの省略形になります。」が表示される。
解説
呼び出し先sample2と呼び出し元msg2のSubステートメントには引数の設定をしていません。次にCallステートメントを省略して、msg2プロシージャを実行しています。msg2プロシージャにはMsgBox関数が利用されているので、メッセージボックスに「Callステートメントの省略形になります。」を表示させます。
最後はEndステートメントを利用してsample2プロシージャを終了させます。
Callステートメントで引数を設定したサンプルコード
Sub sample3()
Dim keyWords As String
keyWords = "引数を渡して呼び出します。"
Call msg3(keyWords)
End Sub
Sub msg3(keyWords As String)
MsgBox keyWords
End Sub
実行結果
メッセージボックスに「引数を渡して呼び出します。」が表示される。
解説
呼び出し先sample3のSubステートメントには引数の設定していませんが、呼び出し元msg3にはkeyWordsが文字列型(String)で設定されています。そして、Dimステートメントを利用して変数keyWordsに文字列型(String)を宣言し、「引数を渡して呼び出します。」を代入します。次にCallステートメントに変数keyWordsを引数に設定して、msg3プロシージャを実行しています。msg3プロシージャにはMsgBox関数が利用されているので、変数keyWordsを代入して「引数を渡して呼び出します。」を表示させます。
最後はEndステートメントを利用してsample3プロシージャを終了させます。
Sub sample3()
Dim keyWords As String
keyWords = "引数を渡して呼び出します。"
msg3 keyWords
End Sub
Sub msg3(keyWords As String)
MsgBox keyWords
End Sub
また、省略形で記述する場合は、引数をカッコで囲まずに半角スペースを入れて記述します。こちらも同様の結果になります。
Callステートメントで戻り値を設定したサンプルコード
Sub sample4()
Dim n As Integer, result As Integer
n = 3
result = addition(n)
Debug.Print "戻り値の数値は" & result
End Sub
Function addition(n As Integer) As Integer
addition = n + 10
End Function
実行結果
戻り値の数値は13
解説
呼び出し先sample4のSubステートメントには引数の設定していませんが、呼び出し元additionのFunctionステートメントには、nが整数型(Integer)で設定されています。次に、Dimステートメントを利用して変数n,resultに整数型(Integer)を宣言し、変数nには「3」を代入します。そして、変数resultにはCallステートメントを省略して、additionプロシージャを実行し戻り値を代入します。additionプロシージャにn=3を参照渡しすると、変数additionは3+10で「13」となるため、こちらが戻り値となります。戻り値を取得したら、DebugオブジェクトのPrintメソッドで「戻り値の数値は13」を表示させます。
最後はEndステートメントを利用してsample4プロシージャを終了させます。
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。