三维数组在VBA中存储工作表中的数据

我有一个约20,000个数据单元的工作。 这些数据每200行属于一个不同的样本。 我想将这些数据存储到一个3维数组,以便能够访问数据,我想这样做:

lastCol = 15 n = 1 For i = 1 To 200 Step 199 sample(n) = sheets(1).range(Cells(i, lastCol), Cells(i + 199, lastCol)).Resize(200, lastCol) n = n + 1 Next 

*我知道,我分配值的方式是不正确的,但我还没有设法find一个清楚的解释如何正确地做到这一点。

*再次澄清这一点:我试图存储,然后访问一个matrix,将有以下大小:10x200x15,10行200行×15列

另一个select(如果你想要的结构你提到)将读取数组中的范围,然后循环通过它,并把它放在所需的结构,如下面的代码:

 Sub Arrays() Dim InArr As Variant Dim OutArr() As String Dim R As Long, rowcount As Long, C As Integer, colcount As Integer, Samp As Long InArr = ThisWorkbook.Sheets(1).Range("A1:B2000").Value2 rowcount = UBound(InArr, 1) colcount = UBound(InArr, 2) ReDim OutArr(1 To Int((rowcount - 1) / 200) + 1, 1 To 200, 1 To colcount) For R = 1 To rowcount Samp = Int((R - 1) / 200) + 1 For C = 1 To colcount OutArr(Samp, (R - 1) Mod 200 + 1, C) = InArr(R, C) Next C Next R End Sub 

包含200(2D)范围variables的1D数组可能是更好的方法:

 Sub Test() Dim i As Long Dim v As Variant ReDim v(1 To 1) For i = 1 To 20000 Step 200 If VarType(v(1)) <> vbVariant Then ReDim Preserve v(UBound(v) + 1) Set v(UBound(v)) = ThisWorkbook.Worksheets("Sheet1").Range("A" & i).Resize(200, 15) Debug.Print v(UBound(v)).Address Next i End Sub 

Debug.Print命令产生下面的输出,确认正确的范围variables在variables数组中:

 $A$1:$O$200 $A$201:$O$400 $A$401:$O$600 ... ... $A$19401:$O$19600 $A$19601:$O$19800 $A$19801:$O$20000