2013-10-10 74 views
5

我有这样的代码,将填充数组粘贴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 

在这里你可以看到,在监视窗口中值是什么一直在

enter image description here

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

enter image description here

是否有可能将整个阵列工作表粘贴不通过阵列,具有循环?

UPDATE考虑看看从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 
+1

为什么你需要一个这样的数组?请参阅[本](http://stackoverflow.com/questions/19277994/error-13-when-pasting-from-another-workbook/19280614#19280614) –

+0

因为我想从一个数组粘贴,而不是从另一个范围 – spences10

+1

但是,那不是你在做什么? '范围(“G10:G14”) - >范围(“H10:H14”)' –

回答

5

你将要使用的转置工作表功能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 
+2

裸链接应作为评论发布;)或者您可能想要改进它?如果链接消失了怎么办?对任何未来的用户都不利。 –

+0

是的,有点肉体的答案请 – spences10

+0

@SiddharthRout如果链接消失,然后生气MS。即使链接失效,我也会提供该函数的名称,如果有人不能使用互联网搜索,那么他们不应该编写代码。 – Sorceri

6

正如我在上面,我的评论中提及了你并不需要一个数组,如果你只想要一个阵列的解决方案,那么你执行你想要做的,但仍然是行动不需要长循环填充数组。直接将范围的值分配给数组。它将创建一个您不需要转置的二维数组。

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