経理部員のプログラミング勉強日記

経理、プログラミング、データ分析などを生業にする30代男性会社員の行動記録です。

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」は変化しません。