Поскольку вы хотите скопировать несколько диапазонов, я предлагаю разделить код копирования в параметризованный Sub и передать его диапазонам для обработки.
Как то так. В этом примере количество копируемых столбцов определяется из FromRange
. ToRange
должна быть только ячейка в левом столбце пункта назначения.
Sub CopyData(FromRange As Range, ToRange As Range)
Dim Data As Variant
With FromRange.Worksheet
Data = .Range(FromRange, .Cells(.Rows.Count, FromRange.Column).End(xlUp)).Value
End With
With ToRange.Worksheet
.Cells(.Rows.Count, ToRange.Column).End(xlUp).Offset(1, 0).Resize(UBound(Data, 1), UBound(Data, 2)) = Data
End With
End Sub
Используйте это так
Sub DemoCopy()
Dim wb As Workbook
Dim FromRange As Range, ToRange As Range
Set wb = Workbooks.Open("C:\destination file")
'Copy columns L and M starting row 4, to A and B starting at next available row
CopyData ThisWorkbook.Worksheets("sheet1").Range("L4:M4"), wb.Worksheets("template").Range("A1")
'Copy columns B and C starting row 4, to C and D starting at next available row
CopyData ThisWorkbook.Worksheets("sheet1").Range("B4:C4"), wb.Worksheets("template").Range("C1")
End Sub