アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

プロシージャーへの引数の渡し方 ByRefByVal

◆プロシージャーへの引数の渡し方 ByRefByVal


  プロシージャーへの変数の渡し方は、2通りあります。
  ByRef と ByValです。

  ByRef は「参照渡し」と呼ばれ、変数を渡されたプロシージャー側で引数の値を
  変更すると、呼び出し元のプロシージャーの変数の値も変わってしまいます。

  C のポインタと同じと考えればよいでしょう。


  一方、ByVal は「値渡し」と呼ばれ、プロシージャに値を提供するだけで、
  ByRef のように呼び出し元のプロシージャーに影響することはありません。

  デフォルトでは、ByRef になっています。


  呼び出したプロシージャーで引数の値を変更すると、思わぬトラブルになりかねません。
  十分に注意してください。



@参照渡し  ByRef

Private Sub test1()

    Dim counter As Integer

    counter = 1

    test2 counter

    MsgBox counter

End Sub

Private Sub test2(ByRef counter)

    counter = counter + 1

End Sub

MsgBoxでの結果表示

  変数(counter)の値が変更されています。


A値渡し  ByVal

Private Sub test3()

    Dim counter As Integer

    counter = 1

    test4 counter

    MsgBox counter

End Sub

Private Sub test4(ByVal counter)

    counter = counter + 1

End Sub

MsgBoxでの結果表示

  変数(counter)の値は変わっていません。


Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.