2016-01-11 7 views
3

Я пытаюсь назначить 2D-массив размером 183x6 на новый лист, заполняя пустые ячейки из A1: G182 значениями массива. Для справки, мой массив называется «Directory», а пустой лист, который я хочу заполнить, называется «List».Excel VBA - Назначение значений 2D массива в диапазон ячеек

Я пробовал два разных подхода, один за явно назначая указанный диапазон в массив, как, например:

Worksheets("List").Range(Cells(1,1), Cells(UBound(Directory, 1) + 1, UBound(Directory, 2) + 1)) = Directory 

, а также пытается перебирать каждую запись в массиве:

For i = 0 To UBound(Directory, 1) 
    For j = 0 To UBound(Directory, 2) 
     Worksheets("List").Range(Cells(i + 1, j + 1), Cells(i + 1, j + 1)) = Directory(i,j) 
    Next j 
Next i 

В обоих случаях я получаю сообщение об ошибке:

Run-time error '1004': 
Application-defined or object defined error. 

Любые идеи, что может происходить ? Я ценю вашу помощь.

+1

Возможный дубликат [Использование переменной для определения диапазона] (http://stackoverflow.com/questions/34714578/using-a- переменный определимый-а-диапазон/34715205 # 34715205). – Jeeped

ответ

3

Try:

Worksheets("List").Range("A1").Resize(UBound(Directory, 1) + 1, UBound(Directory, 2) + 1).Value = Directory 

Или:

For i = 0 To UBound(Directory, 1) 
    For j = 0 To UBound(Directory, 2) 
     Worksheets("List").Range(Worksheets("List").Cells(i + 1, j + 1), Worksheets("List").Cells(i + 1, j + 1)) = Directory(i,j) 
    Next j 
Next i 
+0

Это первое предложение прибило его, большое спасибо! –

+0

@KevinM, пожалуйста. – Fadi

3

Вам не нужны никакие петли для перемещения массива в памяти. Например:

Sub Array2Range() 
    Dim Directory(1 To 182, 1 To 6) As Variant 
    Dim rng As Range, i As Long, j As Long 

    For i = 1 To 6 
     For j = 1 To 182 
     Directory(j, i) = i * j 
     Next j 
    Next i 

    Set rng = Sheets("List").Range("A1:F182") 

    rng = Directory 

End Sub 

будет производить:

enter image description here

Смежные вопросы