忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】処理を繋ぐ「プロシージャ呼び出し」を攻略!

一つの大きな処理(Main)から、特定の役割を持つ別の処理(Sub)を実行することを「呼び出し」と言います。VBAでは、Callキーワードを使う方法と、省略する方法の2通りがありますが、それぞれ記述の「構造」が異なります。

1. 問題:他のSubプロシージャを呼び出す正確な記述

【 問題 】 引数 val を受け取るSubプロシージャ Update を呼び出す際、VBAの構文(フォーマット)として不適切なものはどれでしょうか?

Sub Main()
    Dim val As Integer : val = 100
    ' --- ここで Update を呼び出す ---
End Sub

Sub Update(n As Integer)
    MsgBox n
End Sub

① Call Update(val)
② Update val
③ Call Update val
④ Update(val) (※引数が1つの場合、動作はするが非推奨の構造)

2. 正解:呼び出しの構造(Callとカッコの有無)に関する正解

正解: ③ Call Update val

3. 解説:呼び出しによって「制御」が移る構造

VBAでは、別のSubを呼ぶ際に「Callを使うならカッコで囲む」「Callを使わないならスペースで繋ぐ」という鉄則があります。どちらの方法でも正しく呼び出せますが、記述を混ぜることはできません。

[ プロシージャ呼び出しの構造図 ]

Mainプロシージャ              Updateプロシージャ
+-------------------+          +-------------------+
| Sub Main()        |          | Sub Update(n)    |
|  [処理1]          |          |                  |
|  Call Update(v) --|---(呼出)--->  [引数nの処理]    |
|  [処理2] <--------|---(復帰)---  End Sub          |
| End Sub           |          +-------------------+
+-------------------+

[ 2通りの正しいフォーマット ]
パターA(Callあり):Call Update(val)
パターB(Callなし):Update val
※ Callを使うと「今から別のSubを呼び出す」という意図が明確になり、構造が分かりやすくなります。

1. ここが試験に出る!: 試験では「Callを書かずにカッコを付ける」という誤用が狙われます。特に引数が2つ以上ある場合(例:Call Calc(a, b))において、Callを抜いて Calc(a, b) と書くと構文エラーになります。この「連動性」を正確に把握しましょう。
2. エンジニアの視点: Java 17などモダンな言語では常にカッコが必要ですが、VBAは「文(Statement)」として呼び出す形式を継承しています。大規模な開発では、後から見た人が「どこで外部Subへ飛んでいるか」を一目で判断できるよう、Callを明示的に付ける構造が推奨されることが多いです。


4. まとめ

「Callを使うならカッコ、使わないならスペース」。この呼び出し構造をマスターすることで、複雑に絡み合うマクロの動きを正確に制御できるようになります。減数分裂において情報がリレーされるように、VBAも正確な呼び出しによって、一つの大きな目的(業務自動化)を達成するのです。



PR