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

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][特殊・他 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






Production Japan Import Application. Since 1998