Вот пример того, как передавать значения из листа в массив и из массива в лист.
Sub TestAndTry()
Dim Rng As Range
Dim arrPartList As Variant
Dim R As Long ' row
With ThisWorkbook.Worksheets("NewRelease")
Set Rng = .Range(.Cells(1, "H"), .Cells(5, "H")) ' "H" = columns(8)
arrPartList = Rng.Value
R = .Cells(.Rows.Count, "H").End(xlUp).Row + 1 ' next free row
Set Rng = .Range(Rows(R), Rows(R + UBound(arrPartList) - 1))
Rng.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
' For R = 1 To UBound(arrPartList)
' Debug.Print arrPartList(R, 1)
' Next R
Set Rng = .Cells(R, "H").Resize(UBound(arrPartList), UBound(arrPartList, 2))
Rng.Value = arrPartList
End With
End Sub
Ключ к пониманию этого кода заключается в понимании того, что при копировании диапазона в массив 2D-массив создается, даже если в диапазоне есть только одна строка или столбец. В первом измерении массива есть строки, а во втором - столбцы. Обратите внимание, что Ubound (Arr) равно Ubound (Arr, 1), но для Ubound (Arr, 2) нельзя пропустить 2. Обе границы начинаются с 1.
Когда вы вставляете массив на лист, размер диапазона приема должен точно соответствовать массиву в строках и столбцах. Этого легко добиться, потому что Ubound дает количество строк, а Ubound, 2 - количество столбцов. Итак, вы указываете начальную ячейку и используете метод Resize
для расширения диапазона до размера массива. Продемонстрировано в приведенном выше коде.