2015-12-17 5 views
1

I Создано TempTable как ReDim TempTable(1 To RowSize, 1 To 3), для каждой ячейки у меня есть вектор 55 значения. Смотрите изображение ниже, чтобы лучше понятьОт массива до массива до диапазона

enter image description here

Теперь я хотел бы, чтобы скопировать все содержимое TempTable в моем рабочем листе. Диапазон должен быть [7576x55, 3], так как TempTable имеет 7576 строк. Есть ли умный и быстрый способ сделать это?

+0

Создать новый 2D массив соответствующего размера; затем прокрутите свой исходный массив и заполните его. Возможно 'DIM V (от 1 до 7576, от 1 до 3 * 55)'. Затем установите R = R (7576,165) и R.Value = V –

+0

'Dim tmpTBL в качестве варианта: tmpTBL = Range (« A1: BC7576 »). Value2: Debug.Print LBound (tmpTBL, 1) &": "& UBound (tmpTBL, 1): Debug.Print LBound (tmpTBL, 2) & ":" & UBound (tmpTBL, 2) '. Я не понимаю, что вы хотите делать с 55 (... или 3?) Значениями. – Jeeped

+0

@Jeeped Мне нужно вставить их в рабочий лист. В идеале мне нужно взять копию TempTable (1,1) в A1: A55, затем tahe TempTable (1,2) и скопировать в B1: B5, затем TempTable (1,3) в C1: C55. Теперь сдвигайтесь вниз и складывайте так, TempTable (2,1) - A56: A111, TempTable (2,2) - B56: B111 и т. Д. – gmeroni

ответ

1

Это должно работать плавно (если векторы в каждом столбце имеют одинаковый размер):

Sub test_gmeroni() 
Dim TempTable() As Variant, _ 
    wS As Worksheet, _ 
    Rg As Range, _ 
    InBound As Long, _ 
    i As Long, _ 
    j As Long 

Set wS = ThisWorkbook.Sheets("OutPut") 
Set Rg = wS.Range("A1") 
ReDim TempTable(1 To 7576, 1 To 3) 

For i = LBound(TempTable, 1) To UBound(TempTable, 1) 
    For j = LBound(TempTable, 2) To UBound(TempTable, 2) 
     'Calculate vectors size 
     InBound = UBound(TempTable(i, j), 1) 
     'Put vector on sheet 
     Rg.Offset(0, j - 1).Resize(InBound, 1).Value2 = TempTable(i, j) 
    Next j 
    'Select next cell to start printing next row 
    Set Rg = Rg.Offset(InBound + 1, 0) 
Next i 

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