プロシージャを呼び出すときの()

先日、職場の勉強会で話題に上がったので、備忘録として記しておく。

例えば、こんなサブプロシージャがあったとする。

Sub Calc(a As Double)
    MsgBox a * 1.5
End Sub

aという値を受け取って、メッセージボックスにaの1.5倍の数値を表示する。

次に、このようにしてCalcを呼び出してみる。

Sub test()
   Call Calc(100)
End Sub

↓ 結果は、以下の通り。
f:id:Infoment:20190118221033p:plain

Call を頭に付けない時は、()を外す。

Sub test()
   Calc 100
End Sub

ここでよく混乱するのが、()があっても成立するパターン。

Sub test()
   Calc (100)
End Sub

引数が1個の場合、()があっても無くても成立する。
しかし、例えばこんな時は、エラーになる。

Sub Calc(a As Double, b As Double)
    MsgBox a * b
End Sub
Sub test()
   Calc (a , b)
End Sub

f:id:Infoment:20190118221621p:plain

長らく「何でだろう?」と思いつつ、そういうもんだと丸暗記していた。
しかし先日、職場の詳しい人に教えてもらい、ようやく腑に落ちた。

Callを付けない時の()は、計算式の()なんですよ。
例えば、(3+4)×5 のような時に使う()ですね。

なるほど、そういうことだったのか。だから、(a,b)で怒られたわけだ。

そんなの常識?
お恥ずかしくも、私は知りませんでしたm(_ _)m

参考まで。