【VBA】値渡し(ByVal)と参照渡し(ByRef)

概要

・引数の値が書き換え可能かどうか
・参照渡し(ByRef) ⇒ 書換可
・値渡し(ByVal) ⇒ 書換不可
・省略時は参照渡し(ByRef) で書換可

参照渡し(ByRef)

Sub Test()
    Dim hoge As String: hoge = "初期値"
    
    Call TestByRef(hoge)
    
    Debug.Print hoge    '実行結果:変更しました
    
End Sub

Sub TestByRef(ByRef hoge As String)  '(hoge As String)に省略可
    hoge = "変更しました"
End Sub

f:id:vist764:20210620025628p:plain:w400

値渡し(ByVal)

Sub Test()
    Dim hoge As String: hoge = "初期値"
    
    Call TestByRef(hoge)
    
    Debug.Print hoge    '実行結果:初期値
    
End Sub

Sub TestByRef(ByVal hoge As String)
    hoge = "変更しました"
End Sub

f:id:vist764:20210620025542p:plain:w400