VBAエキスパート(ExcelVBAスタンダード)サンプル問題その3
【問題】
下記のプロシージャ「test」を実行したとき、
メッセージボックスで表示される文字列は何か。
Sub test() Dim buf As String buf = "エクセル" Call test2(buf) MsgBox buf End Sub Sub test2(ByRef buf2 As String) buf2 = "ワード" End Sub
【正解】
ワード
【解説】
参照渡し(ByRef)、値渡し(ByVal)のちがいを問う問題。
値を受け取る側のプロシージャ(test2)で引数を定義する際、
参照渡し(ByRef)だと引数として渡した変数「buf」を参照するため
test2で引数を変更すると、もとの「buf」も変化します。
問題のコードはその状態です。
一方で、値渡し(ByVal)だと一方的に値を渡すだけなので
test2で引数を変更しても、もとの「buf」は変化しません。