構造体

Type 構造体名
  メンバ名 [As 型名]
  ・・・
End Type

メンバ名の下にさらにメンバ名を書くことはできない。
ただしメンバ名の型名として、既に定義した構造体名を書いても良いのでそれで代替えはできる。

なお、構造体はプロシージャや関数内で定義することはできず、モジュール単位でしか定義できない。

別の方法としてTypeを使わずにクラスモジュールを使って構造体を定義することもできる。

例えば下のように定義してみる。

Type ItemList
    Name As String
    Price As Integer
End Type

これを使うためには、例えば以下のように変数宣言できる。

Dim a(1) As ItemList

代入するには

a(0).Name = "りんご"
a(0).Price = 120

みたいに書けば良い。
ここで、Withを使うことができて

With a(1)
  .Name = "みかん"
  .Price = 320
End With

みたいに書くことができる。

これをデバッグのために表示してみる。

For i = 0 To 1
    With a(i)
        Debug.Print .Name, .Price
    End With
Next

次に構造体の中に構造体がある場合を例示します。

Type Address
    Pref As String
    City As String
End Type
Type Prices
    Name As String
    Price As Integer
    Adr As Address
End Type

構造体名「Address」は二つの構造体の仲立ちをしている名前でプログラム的にはあまり意味がありません。(言語仕様としての洗練度の低さがここでも現れています。)

この場合は以下のように代入できます。

a(0).Adr.Pref = "青森県"


-