元の Excel テーブルの列に基づいて配列を設定しようとしています。その後、2番目のExcelテーブルに入力するために、ループしてフィールドの各組み合わせを繰り返し取得しようとしています。これまでのところ、5 つの個別の配列にデータを入力し、それらのデータの数を取得しましたが、問題が発生している「calcarray」にデータを入力しようとしたときに発生しました。実行すると、"calcarray(x, 4) = Data5(d)" で実行時エラー '9' 下付き文字が範囲外になりました。
Sub populate_table()
Dim Data1() As Variant
Dim Data2() As Variant
Dim Data3() As Variant
Dim Data4() As Variant
Dim Data5() As Variant
Dim Data1Count As Integer
Dim Data2count As Integer
Dim Data3Count As Integer
Dim Data4Count As Integer
Dim Data5Count As Integer
Dim ttl As Long
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim f As Integer
Dim d As Integer
Dim tbl As ListObject
Set tbl = Sheets("Data").ListObjects("tbl_variables")
Data1Count = tbl.ListColumns("Data1").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Count
Data2count = tbl.ListColumns("Data2").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Count
Data3Count = tbl.ListColumns("Data3").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Count
Data4Count = tbl.ListColumns("Data4").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Count
Data5Count = tbl.ListColumns("Data5").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Count
Data1 = Array(tbl.ListColumns("Data1").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Value)
Data2 = Array(tbl.ListColumns("Data2").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Value)
Data3 = Array(tbl.ListColumns("Data3").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Value)
Data4 = Array(tbl.ListColumns("Data4").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Value)
Data5 = Array(tbl.ListColumns("Data5").DataBodyRange.Rows.SpecialCells(xlCellTypeConstants).Value)
ttl = (Data1Count) * (Data2count) * (Data3Count) * (Data4Count) * (Data5Count)
Dim calcarray() As Variant
ReDim calcarray(ttl, 4)
x = 0
For i = 0 To Data1Count
For j = 0 To Data2count
For k = 0 To Data3Count
For f = 0 To Data4Count
For d = 0 To Data5Count
calcarray(x, 0) = Data1(i)
calcarray(x, 1) = Data2(j)
calcarray(x, 2) = Data3(k)
calcarray(x, 3) = Data4(f)
calcarray(x, 4) = Data5(d)
x = x + 1
Next
Next
Next
Next
Next