訪問して頂きありがとうございます。まさふくろーです。
この記事では、値渡しと参照渡しの違いについてご紹介します。
値渡しと参照渡しの違いについて
項目 | キーワード | 説明 |
値渡し |
ByVal |
「値のコピー」を渡します。 |
したがって、受け取った引数の値を変更しても、呼び出し元のプロシージャに影響はありません。 |
||
参照渡し |
ByRef |
「値の参照先」を渡します。 |
参照先とは、メモリ上のどの場所に値が格納されているかという情報です。 | ||
そのため値を変更すると、呼び出し元のプロシージャに影響します。 | ||
キーワードを省略した場合は、参照渡しになります。 |
サンプルプログラムで比較する
呼び出し元のプロシージャ
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Private Sub Sample1() Dim a As String Dim b As String a = "ByVal元" b = "ByRef元" Call Sample1_1(a, b) MsgBox "aの値 = " & a & vbCrLf & "bの値 = " & b End Sub |
1 | 呼び出し元のプロシージャ「Sample1」を作成。 |
3 | Byval検証用変数「a」(文字列型)を宣言。 |
4 | ByRef検証用変数「b」(文字列型)を宣言。 |
6 | 文字列「ByVal元」を変数「a」に代入。 |
7 | 文字列「ByRef元」を変数「b」に代入。 |
9 |
プロシージャ「Sample1_1」を呼び出す。 |
引数:Byval検証用変数「a」、ByRef検証用変数「b」。 | |
11 | プロシージャ「Sample1_1」を呼び出した後の変数「a」「b」の値の変化をメッセージボックスに表示する。 |
呼び出し先のプロシージャ
1 2 3 4 5 6 |
Private Sub Sample1_1(ByVal a As String, ByRef b As String) a = "ByVal変更" b = "ByRef変更" End Sub |
1 |
呼び出し先のプロシージャ「Sample1_1」を作成。 |
引数:a(値渡しの変数)、b(参照渡しの変数)。 | |
3 | 値渡しの変数「a」に文字列「ByVal変更」を代入。 |
4 | 参照渡しの変数「b」に文字列「ByRef変更」を代入。 |
実行結果
変数 | 説明 |
a(値渡し) |
プロシージャ「Sample1_1」内で値を変更しても、呼び出し元の値は変わらない。 |
b(参照渡し) | プロシージャ「Sample1_1」内で値を変更した場合、呼び出し元の値も変わる。 |
最後まで読んでいただき、ありがとうございました!
本のまとめ関連記事はこちら