将整列数据分配给vba中的数组的特定列

我有一个excel工作簿,我正在处理大量的数据。 在这一点大概5000列和1000行,但这会增长。 我已经定义和排列在下面的方式

ReDim arr(1 To numRows, 1 To lastcol3) 

如果我以下面的方式使用double for循环,我可以填充整个数组,它可以工作:

 For r = 1 To lastcol3 For i = 1 To numRows arr(i, r) = ws1.Cells(i, 11) Next Next 

其中ws1是所讨论的工作表,11是我想从中获取数据的数据列(每个r值都有变化)。 这种方法的工作,但需要大量的时间,因为它是循环通过每一行数据。

我想知道是否有一种方法,为r的每个值,将列11分配给数组中的相应列“r”。 这将确保代码只需要通过r循环,而不是我呢?

我在网上search了很多,但似乎无法find一种方法来定义一个数组中的特定列,并使其等于一个数据范围。

如果您需要进一步澄清或代码的副本,请让我知道。

就我看来,你只是为了价值观念。 但是,与工作表的每次交互都比variables之间的交互慢得多。 要么使用一个辅助variables来做到这一点:

 Dim xxx As Variant xxx = ws1.Cells(i, 11).Resize(numRows, 1).Value For r = 1 To lastcol3 For i = 1 To numRows arr(i, r) = xxx(i, 1) Next Next 

或者更快地使用()()选项,像这样:

 ReDim arr(1 To lastcol3) Dim xxx As Variant xxx = Application.Transpose(ws1.Cells(i, 11).Resize(numRows, 1).Value) For r = 1 To lastcol3 arr(r) = xxx Next 

但为了获得价值,你需要像arr(r)(i)那样来解决它,这在开始时可能会令人困惑。 但是这也取决于你以后要做什么。

您可以直接从一个范围内分配一个数组,而无需循环。 数组types必须是变体。

例如

 dim myArr() as Variant dim myRng as Range Set myRng = Worksheets("Sheet1").Range("A1:Z100") myArr = myRng.Value '... do stuff with myArr Set myRng = Worksheets("Sheet2").Range("A1:Z100") myRng.Value = myArr 

Chip Pearson有很多有用的数组处理例程。