2013-10-10 118 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