Excel VBA | 参照渡し(ByRef)

VBA
スポンサーリンク

要点まとめ

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
VB
  • Testで変数strに「こんにちは」を代入。
  • createStringstr参照渡しすると、strが「こんにちは、こんばんは」に書き換えられる。
  • 呼び出し元のstrも変更されているので、セルA1には「こんにちは、こんばんは」と表示される。

初心者へのアドバイス

  • 「値渡し」=コピーを渡す → 呼び出し元は変わらない。
  • 「参照渡し」=本体を渡す → 呼び出し元も変わる。
  • 使い分けの目安:
    • 呼び出し先で値を変えたい → ByRef
    • 呼び出し先で値を変えたくない → ByVal

まとめ

  • ByVal:安全に値を渡す(呼び出し元は変わらない)。
  • ByRef:呼び出し元の変数を直接操作できる。
  • VBAでは、「呼び出し元に結果を返したいときはByRef」を使うのが基本です。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました