記事検索

検索ワードを入力してください。
Sky Tech Blog
【VBA】値渡し​(ByVal)と​参照渡し​(ByRef)に​ついて

【VBA】値渡し​(ByVal)と​参照渡し​(ByRef)に​ついて

VBA(Visual Basic for Applications)における値渡し(ByVal)と参照渡し(ByRef)の違いについて解説しています。これらの概念を理解することで、関数やメソッドに引数を渡す際に効率的でバグの少ないコードを書くことができます。

今回は、VBA(Visual Basic for Applications)における値渡し(ByVal)と参照渡し(ByRef)について解説します。
これらは、関数やメソッドに引数を渡す際の重要な概念です。
これらの違いを理解することで、より効率的でバグが少ないコードを書くことができます。

値渡し​(ByVal)とは?

ByVal(値渡し)とは、関数やメソッドに引数を渡すときに、その変数の値を渡す方法です。
この方法では、呼び出し元の変数には影響がありません。

具体的には、以下のような特徴があります。

  • 呼び出し先で引数の値を変更しても、呼び出し元の引数の値は変わりません。
  • 呼び出し先で使われるのは、呼び出し元の変数のコピーです。
Sub TestByVal ()
       Dim num As Integer: num = 10
       Call ChangeValueByVal(num)
       MsgBox num  '結果は10
End Sub

Sub ChangeValueByVal (ByVal x As Integer)
     x = x + 5
End Sub

この例では、ChangeValueByValサブルーチンにnumの値が渡されますが、num自体は変更されません。 したがって、メッセージボックスには10が表示されます。

参照渡し​(ByRef)とは?

ByRef(参照渡し)とは、関数やメソッドに引数を渡すときに、その変数自体を渡す方法です。 この方法では、呼び出し元の変数に影響があります。

具体的には、以下のような特徴があります。

  • 呼び出し先で引数の値を変更すると、呼び出し元の引数の値も変わります。
  • 呼び出し先で使われるのは、呼び出し元の変数そのものです。
Sub TestByRef ()
        Dim num As Integer: num = 10
        Call ChangeValueByRef(num)
        MsgBox num ' 結果は15
End Sub

Sub ChangeValueByRef (ByRef x As Integer)
        x = x + 5
End Sub

この例では、ChangeValueByRefサブルーチンにnumの参照が渡されます。
したがって、xの値を変更するとnumも変更され、メッセージボックスには15が表示されます。

注意点

上記で説明した「ByVal」と「ByRef」は省略することもできます。
しかし、省略した場合は、参照渡し(ByRef)になりますので、意図せず呼び出し元の変数の値が変わってしまうことがあります。 そのため、引数の渡し方を明示的に指定することをお勧めします。

まとめ

VBAにおける値渡し(ByVal)と参照渡し(ByRef)の違いについて理解していただけましたでしょうか?
これらの概念を正しく使い分けることで、より効率的でバグの少ないコードを書くことができます。
ぜひ、実際のプロジェクトで試してみてください!


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム