2013-10-10 6 views
5

У меня есть этот код, который будет заполнять массивPaste 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

Как я уже говорил в моем комментарии выше, что вам не нужен массив, чтобы выполнить действие, которое вы пытаетесь сделать, но до сих пор, если вы хотите только раствор массива, то вы не нужно проходить длинный путь заполнения массива в цикле. Непосредственно присвойте значение диапазона массиву. Он создаст 2D-массив, который вам не нужно транспонировать.

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