VBA:引数の「ByVal」(値渡し)、「ByRef」(参照渡し)について


プロシージャの引数で使う、「ByVal」(値渡し)、「ByRef」(参照渡し)についての説明していきます。
簡単に言うと以下のような感じです。

  • 「ByVal」(値渡し):引数として渡した変数は元の変数に影響を与えない
  • 「ByRef」(参照渡し):引数として渡した変数の値が引き渡し先で変わると、元の変数も変わる
  • 変数を引数として渡した場合に、その変数に影響があるかないかの違いなのですが、言葉にするより実際に動かしてみるとわかります。

    ◆「ByVal」(値渡し)のサンプル

    「ByVal」(値渡し)のサンプルコードです。
    動かしてみるとプロシージャの「chkByVal」で変数を変化((3)部分)させても、元の変数に影響がないこと((4)部分)が分かります。

    ◆「ByRef」(参照渡し)のサンプル

    「ByRef」(参照渡し)のサンプルコードです。
    動かしてみるとプロシージャの「chkByRef」で変数を変化させる((3)部分)と、元の変数も変更になっている((4)部分)ことが分かります。

    ◆引数に「ByVal」や「ByRef」を付けない場合

    以下のように「ByVal」や「ByRef」を付けない状態にすると、「ByRef」として処理されます。
    もし変数をプロシージャ内で変更を加える場合は予期しない動きになるかもしれないので注意です。


    おすすめ