特殊・他 ByValとByRefによる引数渡し-引数渡しの方法

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Visual Basic 言語の概念

ByVal と ByRef による引数渡し(引数渡しの方法)

  • Visual Basic では、プロシージャに引数を渡す方法として、ByVal キーワードを使って "値渡し" で渡す方法とByRef キーワードを使って "参照渡し" で渡す方法があります。
  • 【値渡しで引数を渡す】ByVal

    と、プロシージャは、引数の基になる呼び出し元のコードの可変要素の内容を変更できません。
  • 【参照渡しで引数を渡す】ByRef

    と、プロシージャは、その内容を呼び出し元のコードと同じように変更できます。
  • ※引数の値渡しと参照渡しの違いは、データ型における値型と参照型の分類とは異なります。
  • ※ただし、両者の間に関連性はあります。
  • 【変更できる引数と変更できない引数】

  • 引数の基になるプログラミング要素には、値を変更できる可変要素と、値を変更できない不変要素があります。
  • 可変要素と不変要素の一覧を次に示します。
    • 《可変要素》
      • 宣言された変数 (オブジェクト変数を含む)
      • (クラスの) フィールド
      • 配列要素
      • 構造体要素
    • 《不変要素》
      • 定数
      • リテラル
      • 列挙定数
    • 不変の引数は、参照渡しで渡された場合でも、呼び出し元のコードで変更されることはありません。
    • 呼び出したプロシージャによってコピーが変更されることはあっても、その変更が呼び出し元のコードの基の要素に影響することはありません。
  • ByVal による引数渡し

  • 値による引数渡しプロシージャは自分で変数を変更できません。
  • ByRef による引数渡し

  • 参照による引数渡しプロシージャは自分で変数を変更できます。
  • Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます。
Option Explicit


Sub TestByValandByRef1()
    Dim bytValue As Byte

    bytValue = 5
    Call Test1(bytValue)
    MsgBox bytValue

    bytValue = 5
    Call Test2(bytValue)
    MsgBox bytValue

End Sub



Private Sub Test1(ByVal bytVl As Byte)

    bytVl = 1

End Sub



Private Sub Test2(ByRef bytVl As Byte)
'参照による引数渡し
    bytVl = 9

End Sub



Sub TestByValandByRef2()
    Dim bytValue As Byte

    bytValue = 5
    Call Test3(bytValue)
    MsgBox bytValue

    bytValue = 5
    Call Test4(bytValue)
    MsgBox bytValue

End Sub



Private Sub Test3(bytVl As Byte)
'●Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます
    bytVl = 1

End Sub



Private Sub Test4(bytVl As Byte)
'●Visual Basic は、指定しない限り、プロシージャの引数は参照渡しByRefで渡されます
    bytVl = 9

End Sub

 

 

 

2000年01月01日|[VBサンプルコード]:[特殊・他]