Вставить диапазоны столбцов
Особенности
- Назначены все значения констант.
- Добавлена проверка открытия рабочей книги.
- Уменьшены ссылки на объекты на одном листе.
- Заменено копирование / вставка копией (назначение).
Настройте значения в разделе констант в соответствии со своими потребностями.
Код
Sub transfer()
' Source
Const cSource As Variant = "FinalinputFile" ' Worksheet Name/Index
Const cSFirst As Integer = 3 ' First Row Number
Const cLast As Integer = 11000 ' Last Row Number
Const cSCols As String = "C,E,G,I,K,M,U" ' Column List
' Target
Const cPath As String = "D:\Desktop\My\" ' Workbook Path
Const cName As String = "MyData.xlsx" ' Workbook Name
Const cTarget As Variant = "Data" ' Worksheet Name/Index
Const cTFirst As Integer = 2 ' First Row Number
Const cTCols As String = "E,F,G,H,I,J,M" ' Column List
Dim DataWs As Worksheet ' Target Worksheet
Dim vntS As Variant ' Source Column Array
Dim vntT As Variant ' Target Column Array
Dim i As Integer ' Columns Counter
' Check if Target Workbook is already open.
For i = 1 To Workbooks.Count
If Workbooks(i).Name = cName Then Exit For
Next
' Create reference to Target Worksheet.
If i > Workbooks.Count Then ' Target Workbook is not open.
Set DataWs = Workbooks.Open(cPath & cName).Worksheets(cTarget)
Else ' Target Workbook is open.
Set DataWs = Workbooks(i).Worksheets(cTarget)
End If
' Write Column Lists into Column Arrays.
vntS = Split(cSCols, ",")
vntT = Split(cTCols, ",")
' Copy Source Column Ranges to Target Columns Ranges.
With ThisWorkbook.Sheets(cSource)
For i = 0 To UBound(vntS) ' or Ubound(vntT) - it's the same.
.Range(.Cells(cSFirst, vntS(i)), .Cells(cLast, vntS(i))).Copy _
DataWs.Cells(cTFirst, vntT(i))
Next
End With
' Save and close Target Workbook using Parent property.
With DataWs.Parent
.Close True ' True saves the workbook.
End With
Set DataWs = Nothing
End Sub