引数の値渡しと参照渡しとはそれぞれどのようなことか、プロシージャの呼び出しの続きで学習 複製されたものを渡すイメージ、渡した先で値が変更されても元の値は変更されない そのままを渡すイメージ、渡した先で値が変更されると元の値も変更される ▼サブルーチンの引数名を親プロシージャの変数名と揃えた記述例▼ ▼処理結果▼ ▼サブルーチンの引数名と親プロシージャの変数名を変えた記述例▼ ▼処理結果▼ サブルーチン側でOptionalキーワードを使用して初期値を設定することにより、 ▼処理結果▼
引数の値渡し
▼構文▼
引数を受け取る側のプロシージャに記述
Sub プロシージャ名 (ByVal 引数 As データ型)
Function プロシージャ名 (ByVal 引数 As データ型) As データ型
引数の参照渡し
▼構文▼
引数を受け取る側のプロシージャに記述
Sub プロシージャ名 (ByRef 引数 As データ型)
Function プロシージャ名 (ByRef 引数 As データ型) As データ型
値渡しと参照渡しの記述例
Sub callsSub1()
Dim callStr1 As String
Dim callStr2 As String
callStr1 = "たま氏は..."
callStr2 = "たま氏は"
call callSub2(callStr1,callStr2)
debug.Print callStr1
debug.Print callStr2
End Sub
Sub callSub2(ByVal callStr1 As String,ByRef callStr2 As String) 'callStr1は値渡し、callStr2は参照渡し
callStr1 = callStr1 & "変わっていない"
callStr2 = callStr2 & "変わってしまった"
End Sub
初学者ゆえに混乱しがちだが、これはあくまで変数callStr2の中身がスコープ内で更新されたということであって
サブルーチンから親プロシージャに値が戻されたわけではないことに留意Sub callsSub1()
Dim callStr1 As String
Dim callStr2 As String
callStr1 = "たま氏は..."
callStr2 = "たま氏は"
Call callSub2(callStr1, callStr2)
Debug.Print callStr1
Debug.Print callStr2
End Sub
Sub callSub2(ByVal callStr111 As String, ByRef callStr222 As String)
callStr111 = callStr111 & "変わらずにいた"
callStr222 = callStr222 & "変わってしまった"
End Sub
結果は前と変わらない、つまり、サブルーチン側の引数名を親プロシージャの変数名と揃える必要はないOptionalキーワードで引数の記述を省略
親プロシージャ側での引数の記述を省略できる
親プロシージャ側で引数が省略された場合に、設定した初期値が採用される
▼構文▼
引数を受け取る側のプロシージャに記述
Sub プロシージャ名 (Optional ByRefまたはByRef 引数 As データ型 = 初期値)
Function プロシージャ名 (Optional ByRefまたはByRef 引数 As データ型 = 初期値) As データ型
▼記述例▼Sub callsSub1()
Debug.Print callSub2("tama-shiの") '指定した引数がそのまま反映される
Debug.Print callSub2() '引数の記述を省略したのでOptionalで設定した初期値が採用され戻り値として返される
End Sub
Function callSub2(Optional ByVal callStr As String = "たま氏の")
callSub2 = callStr & "あほ"
End Function