要点まとめ
Excel VBAで「参照渡し(ByRef)」を使うと、呼び出し先のプロシージャで変数の値を変更すると、その変更が呼び出し元にも反映されます。これにより「値渡し(ByVal)」ではできない、呼び出し元への値の返却が可能になります。
ポイント解説
- 値渡し(ByVal)
- 呼び出し時に「変数に入っている値」だけが渡される。
- 呼び出し先で値を変更しても、呼び出し元の変数には影響しない。
- 例:
Sub sample(ByVal x As String)
- 参照渡し(ByRef)
- 「変数そのもの」が渡される。
- 呼び出し先で値を変更すると、呼び出し元の変数も同じように変更される。
- 例:
Sub sample(ByRef x As String)
サンプルコードの流れ
Sub Test()
Dim str As String
str = "こんにちは"
Call createString(str)
Range("A1").Value = str
End Sub
Sub createString(ByRef str As String)
str = str & "、こんばんは"
End Sub
VBTestで変数strに「こんにちは」を代入。createStringにstrを参照渡しすると、strが「こんにちは、こんばんは」に書き換えられる。- 呼び出し元の
strも変更されているので、セルA1には「こんにちは、こんばんは」と表示される。
初心者へのアドバイス
- 「値渡し」=コピーを渡す → 呼び出し元は変わらない。
- 「参照渡し」=本体を渡す → 呼び出し元も変わる。
- 使い分けの目安:
- 呼び出し先で値を変えたい → ByRef
- 呼び出し先で値を変えたくない → ByVal
まとめ
- ByVal:安全に値を渡す(呼び出し元は変わらない)。
- ByRef:呼び出し元の変数を直接操作できる。
- VBAでは、「呼び出し元に結果を返したいときはByRef」を使うのが基本です。
