粘贴vba数组

我有这个代码将填充一个数组

Sub rangearray() Dim arr() As Variant Dim Rng As Range Dim myCell As Range Dim i As Integer Set Rng = ActiveSheet.Range("G10:G14") For Each myCell In Rng ReDim Preserve arr(i) arr(i) = myCell i = i + 1 Next myCell ActiveSheet.Range("H10:H14") = arr() End Sub 

在这里您可以看到监视窗口中的值是已经加载的值

在这里输入图像说明

除了将数组添加回工作簿时,它只粘贴数组的第一个元素。

在这里输入图像说明

是否有可能将整个数组粘贴到工作表而不必循环访问数组?

更新看了从Sorceri的链接后,我已经修改了代码使用.Transpose函数,所以我修改后的代码现在看起来像这样:

 Sub rangearray() Dim arr() As Variant Dim Rng As Range Dim myCell As Range Dim i As Integer Set Rng = ActiveSheet.Range("A1:A5") For Each myCell In Rng ReDim Preserve arr(i) arr(i) = myCell i = i + 1 Next myCell ActiveSheet.Range("B1:B5") = WorksheetFunction.Transpose(arr) End Sub 

您将需要使用转置工作表函数http://msdn.microsoft.com/en-us/library/office/ff196261.aspx

见下文。 您必须将其分配给范围的值

 Sub rangearray() Dim arr() As Variant Dim Rng As Range Dim myCell As Range Dim i As Integer Set Rng = ActiveSheet.Range("A1:A5") For Each myCell In Rng ReDim Preserve arr(i) arr(i) = myCell i = i + 1 Next myCell ActiveSheet.Range("B1:B5").Value = WorksheetFunction.Transpose(arr) End Sub 

正如我在上面的评论中提到的,你不需要一个数组来执行你想要做的动作,但是如果你只想要一个数组解决scheme,那么你不需要在循环中填充数组。 直接将范围的值分配给数组。 它将创build一个二维数组,你不需要转置。

 Sub rangearray() Dim arr Dim Rng As Range With ActiveSheet Set Rng = ActiveSheet.Range("G10:G14") arr = Rng.Value .Range("H10").Resize(UBound(arr, 1)).Value = arr End With End Sub