VBAの「ユーザー定義型」変数は、Cの構造体と同様のものである。
しかし、入門書には実践的な使い方が書いていないので、まとめておく。
しかし、入門書には実践的な使い方が書いていないので、まとめておく。
Private Type uHoge '型定義:Cのstructに同じ
ID As Long
name As String
End Type
Private Sub MyInt ()
Dim Hoge() As uHoge 'uHoge型変数の動的配列宣言
Const MAX = 2
ReDim Hoge(MAX) '配列の個数を再定義(2個)
'内部変数の指定方法はHoge(n).IDとするが、以下のようにWithも使える。
With Hoge(0)
.ID = 55
.name = "taro"
End With
With Hoge(1)
.ID = 88
.name = "Bill"
End With
'初期の(0)の"55:taro"を表示
MsgBox Hoge(0).ID & ":" &Hoge(0).name
Call MySwap(Hoge) '処理する関数に、構造体の配列を引数として渡す
'処理された結果を表示 (交換され"88:Bill"になっている)
MsgBox Hoge(0).ID & ":" &Hoge(0).name
'動的配列の場合メモリを解放。再度使うにはReDimで個数を再定義する。
'静的配列としてDim Hoge(2) As uHoge と宣言していた場合は、構造体の
配列内全てが、ID=0、name=""で初期化される。
Erase Hoge
End Sub
' (Hoge(0)とHoge(1)を交換する関数)
' 下例のように構造体の配列を参照渡しの引数として受ける(ByValを付けない)と、
' 配列への処理結果がそのまま呼び出し元に反映する
Private Sub MySwap ( Hoge() As uHoge )
Dim w_Hoge As uHoge '作業用のuHoge型構造体
'(0)と(1)を交換する
w_Hoge = Hoge(0) '同じ型は一括代入可能
Hoge(0) = Hoge(1)
Hoge(1) = w_Hoge
End Sub
ID As Long
name As String
End Type
Private Sub MyInt ()
Dim Hoge() As uHoge 'uHoge型変数の動的配列宣言
Const MAX = 2
ReDim Hoge(MAX) '配列の個数を再定義(2個)
'内部変数の指定方法はHoge(n).IDとするが、以下のようにWithも使える。
With Hoge(0)
.ID = 55
.name = "taro"
End With
With Hoge(1)
.ID = 88
.name = "Bill"
End With
'初期の(0)の"55:taro"を表示
MsgBox Hoge(0).ID & ":" &Hoge(0).name
Call MySwap(Hoge) '処理する関数に、構造体の配列を引数として渡す
'処理された結果を表示 (交換され"88:Bill"になっている)
MsgBox Hoge(0).ID & ":" &Hoge(0).name
'動的配列の場合メモリを解放。再度使うにはReDimで個数を再定義する。
'静的配列としてDim Hoge(2) As uHoge と宣言していた場合は、構造体の
配列内全てが、ID=0、name=""で初期化される。
Erase Hoge
End Sub
' (Hoge(0)とHoge(1)を交換する関数)
' 下例のように構造体の配列を参照渡しの引数として受ける(ByValを付けない)と、
' 配列への処理結果がそのまま呼び出し元に反映する
Private Sub MySwap ( Hoge() As uHoge )
Dim w_Hoge As uHoge '作業用のuHoge型構造体
'(0)と(1)を交換する
w_Hoge = Hoge(0) '同じ型は一括代入可能
Hoge(0) = Hoge(1)
Hoge(1) = w_Hoge
End Sub
Private Sub Btn1_Click () 'ボタンを押したら実行
Call MyInt
End Sub
Call MyInt
End Sub