たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_配列/ユーザ定義型変数を引数で渡す

配列やユーザ定義型変数の渡し方を、プロシージャの呼び出し・引数渡しの続きで学習

配列を渡す

配列を渡す際には必ず参照渡しとなる、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

▼処理結果▼


ユーザ定義型変数を渡す

ユーザ定義型変数を渡す際には必ず参照渡しとなる、ByValは使用不可
※ユーザ定義型変数を値渡ししたい場合には、変数の要素をひとつずつ引数として渡す

▼構文▼
引数(ユーザ定義型変数)を渡す側のプロシージャに記述
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

▼処理結果▼

区切り線より下の出力で、最初に格納した要素が変わっていない(値渡しができた)ことを確認できる