今回は構造体(Type)の中に構造体を入れる方法を紹介します。
過去記事で構造体を使用したマクロを紹介していますので、こちらも併せてご覧ください!
構造体の中に構造体を入れる方法
結論、構造体の中に構造体を入れる方法は別にTypeを定義して、変数の型をそのType名で指定すればOKです。
文章だとよく分からないと思うので、今回例として個人情報を出力するマクロを作成しました。そのままコピペして確認してみてください。
Type AddressDetail
Prefecture As String
Municipality As String
PlaceNameAndNumber As String
End Type
Type testInformation
LName As String
FName As String
Gender As String
Age As Long
Height As Double
Weight As Double
Address As AddressDetail
End Type
Sub test()
Dim test_user As testInformation
With test_user
.LName = "はりぼな"
.FName = "じろう"
.Gender = "男性"
.Age = 25
.Height = 175.5
.Weight = 68.7
.Address.Prefecture = "はりぼな県"
.Address.Municipality = "はりぼな市"
.Address.PlaceNameAndNumber = "わんこ1-2-3"
MsgBox "名前:" & .LName & " " & .FName & vbCrLf & _
"性別:" & .Gender & vbCrLf & _
"年齢:" & .Age & "歳" & vbCrLf & _
"身長:" & .Height & "cm" & vbCrLf & _
"体重:" & .Weight & "kg" & vbCrLf & _
"住所:" & .Address.Prefecture & .Address.Municipality & .Address.PlaceNameAndNumber
End With
End Sub
実行するとこんな感じで名前やら性別,住所がメッセージボックスに表示されます。
それぞれポイントになるところを順に説明します。
Typeを別途定義する
今回の例ではTypeをtestInformationとAddressDetailの2つを定義しました。testInformationは名前,性別,年齢,身長,体重,住所を格納する用で、AddressDetailは住所の詳細(県,市町村,地名・番地)を格納する用で定義しています。
Type testInformation
LName As String
FName As String
Gender As String
Age As Long
Height As Double
Weight As Double
Address As AddressDetail
End Type
Type AddressDetail
Prefecture As String
Municipality As String
PlaceNameAndNumber As String
End Type
このように、構造体を入れたい場合はまずTypeを別に定義しておく必要があります。ここは当たり前っちゃ当たり前ですね。(笑)
変数の型を対象のType名で定義する
Typeを入れたい場合、変数の型を対象のType名で定義する必要があります。例で言うと、testInformationのAddressの型をAddressDetailで定義する感じです。
Type testInformation
~
Address As AddressDetail
End Type
このように定義することでAddressDetail内の変数を指定できるようになります。
呼び出し方
Typeを入れた変数を呼び出したい場合、プロパティを使用するときと同じように変数を.(ドット)で繋いであげると呼び出すことが出来ます。
今回の例だとtest_user.Address.PrefectureのようにすればOKです。
With test_user
.LName = "はりぼな"
~
.Address.Prefecture = "はりぼな県"
.Address.Municipality = "はりぼな市"
.Address.PlaceNameAndNumber = "わんこ1-2-3"
~
End With
このように、
【Sub内で定義した変数名】.【Type名の型の変数名】.【Type内の変数名】
とすることでTypeに入れた変数を呼び出すことが出来ます。
注意点
構造体の中に構造体を入れる時の注意点は入れたいTypeを入れるTypeより上の位置に定義することです。これまた分かりにくいと思いますが、今回の例で言うとtestInformationより上にAddressDetailを定義しないとダメってことです。
Type AddressDetail
Prefecture As String
Municipality As String
PlaceNameAndNumber As String
End Type
Type testInformation
LName As String
FName As String
Gender As String
Age As Long
Height As Double
Weight As Double
Address As AddressDetail
End Type
それより下に定義していると実行時にエラーが発生します。
なので、構造体を入れたい時はTypeの位置を入れるTypeより上に定義するように気を付けましょう。
逆にエラーが起きるようなら、Typeの位置が間違っていないか(下に定義していないか)確認するようにしましょう。
まとめ
今回は構造体の中に構造体を入れる方法を紹介しました。構造体を入れる場合は、
- 別にTypeを定義して、変数の型をそのType名で指定する
- エラーが出たら、Typeの定義位置を確認する
この2点を気を付けて使いましょう。
コメント