配列やユーザ定義型変数の渡し方を、プロシージャの呼び出し・引数渡しの続きで学習 配列を渡す際には必ず参照渡しとなる、ByValは使用不可 ▼処理結果▼ ユーザ定義型変数を渡す際には必ず参照渡しとなる、ByValは使用不可 ▼処理結果▼ ▼処理結果▼
配列を渡す
▼構文▼
引数(配列)を渡す側のプロシージャに記述
Call プロシージャ名 (配列変数)
引数を受け取る側のプロシージャに記述
Sub プロシージャ名 (ByRef 配列変数() As データ型)
▼記述例▼Sub callsSub1()
Dim callStr(3) As String
Dim i As Long
For i = 0 To 3
callStr(i) = "たま氏は念のため" & i + 1 & "回確認した"
Next i
Call callSub2(callStr)
End Sub
Sub callSub2(ByRef callStr() As String)
Dim hairetsu As Variant
For Each hairetsu In callStr
Debug.Print hairetsu
Next
End Sub
ユーザ定義型変数を渡す
※ユーザ定義型変数を値渡ししたい場合には、変数の要素をひとつずつ引数として渡す
▼構文▼
引数(ユーザ定義型変数)を渡す側のプロシージャに記述
Call プロシージャ名 (ユーザ定義型変数)
引数を受け取る側のプロシージャに記述
Sub プロシージャ名 (ByRef ユーザ定義型変数 As データ型)
▼記述例▼Type testType '宣言エリアに記述
ID as Long
Name As String
End Type
Sub callsSub1()
Dim idName As testType
idName.ID = "001"
idName.Name = "tama-shi"
Call callSub2(idName)
End Sub
Sub callSub2(ByRef idName As testType)
Dim userTeigi As String
userTeigi = "登録番号" & idName.ID & "の" & idName.Name & "さん"
Debug.Print userTeigi
End Sub
【参考】配列を値渡ししたい場合の記述例
Sub callSub1()
Dim callStr(3) As String
Dim val_Hairetsu As Variant '配列格納用の変数を準備
Dim i As Long
For i = 0 To 3
callStr(i) = "たま氏は念のため" & i + 1 & "回確認した"
Next i
val_Hairetsu = callStr '一旦、変数に格納する
Call callSub2(val_Hairetsu)
Debug.Print "---------------"
For Each val_Hairetsu In callStr '元の配列要素は変更されずに残っていることを確認
Debug.Print val_Hairetsu
Next
End Sub
Sub callSub2(ByVal val_Hairetsu As Variant)
Dim callStr2(3) As String
Dim hairetsu As Variant
Dim i As Long, j As Long
j = 0
For i = 4 To 7
callStr2(j) = "たま氏は念のため" & i + 1 & "回確認した"
j = j + 1
Next
val_Hairetsu = callStr2
For Each hairetsu In val_Hairetsu
Debug.Print hairetsu
Next
End Sub
区切り線より下の出力で、最初に格納した要素が変わっていない(値渡しができた)ことを確認できる