質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

15421閲覧

構造体での宣言のようにクラスモジュールを使って配列化したい

mononobe

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/08/05 13:43

クラスモジュールを使って下記の構造体で宣言したようにクラスでデータを扱いたい。

VBA

1Type AAA 2 dataA As String 3End type 4 5Type BBB 6 dataB AS String 7 dataAAA AS AAA 8End type 9 10Type CCC 11 dataC As String 12 dataBBB AS BBB 13End Type 14 15Sub main() 16 dataDDD() As CCC 17 Redim dataDDD(1) 18 Redim dataDDD(1).dataBBB(2) 19 Redim dataDDD(1).dataBBB(2).dataCCC(4) 20 21Endsub 22 23

しかし、調べてみたところクラスを配列化する場合はfor文で個別にインスタンス化すればできるということがわかったのですが、
そうするとdataDDDが配列化できてもdataBBBとdataCCCに当たる箇所が配列化できなく、配列化する宣言方法は無いでしょうか?

現状では下記のように考えています。

VBA

1'Class1 2Public dataA As String 3 4'Class2 5Public data1 As New = Class1 6Public dataB As String 7 8'Class3 9Public data3 As New = Class2 10Public dataC As String 11 12'標準モジュール 13sub main() 14 Dim dataDDD() As Class3 15 Dim i As long 16 17 for i=0 To 1 18 ReDim dataDDD(i) = New Class3 19 Next i 20 21End Sub 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

いろいろ構文が間違ってます。
Public data1 As New = Class1
とか
ReDim dataDDD(i) = New Class3

あと動的配列の ReDim は、Preserve を入れておかないと、初期化されちゃいます。

'Class1 Public dataA As String 'Class2 Public data1 As New Class1 Public dataB As String 'Class3 Public data3 As New Class2 Public dataC As String '標準モジュール Sub main() Dim cls3 As Class3 Dim dataDDD() As Class3 Dim i As Long For i = 0 To 1 ReDim Preserve dataDDD(i) Set dataDDD(i) = New Class3 dataDDD(i).data3.data1.dataA = i & "番目のdataA" dataDDD(i).data3.dataB = i & "番目のdataB" dataDDD(i).dataC = i & "番目のdataC" Next i '内容確認 Dim vCls For Each vCls In dataDDD Debug.Print vCls.data3.data1.dataA, vCls.data3.dataB, vCls.dataC Next End Sub

自分がするなら、配列ではなく、Collectionオブジェクトに格納するかな。

投稿2018/08/06 04:01

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

宣言の仕方が間違ってます。

dataAAA() AS AAA

と、変数の直後に()が必要です。
※String型等でも同じです。
※Variant型は()無くてもRedimできます。

投稿2018/08/06 00:28

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問