goo blog サービス終了のお知らせ 

道草日記

通勤幾星霜…寄り道回り道の日記です。

VBAの構造体(ユーザー定義型変数)について

2007-07-04 | VBA
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

Private Sub Btn1_Click ()   'ボタンを押したら実行
    Call MyInt
End Sub



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。