В приведенном ниже коде предполагается, что лист с копируемыми данными называется "Главный". Он также предполагает, что ваши "вставленные" листы содержат заголовки столбцов, поэтому он начнет вставку со строки 2. Если это не то, что вы хотите, удалите .Offset(1, 0)
вызов с линии, выполняющей вставку.
Возможно, вам понадобится лучшая обработка ошибок, чем Debug.Print
строку, но я оставлю это на ваше усмотрение.
Протестировано в Excel 2007 и работает как положено.
Sub DoCopy()
Const copySheetName As String = "Main"
Dim rw As Integer
Dim lngRowStart As Long
Dim lngRowEnd As Long
Dim copySheet As Excel.Worksheet: Set copySheet = ThisWorkbook.Worksheets(copySheetName)
Dim pasteSheet As Excel.Worksheet
lngRowStart = 1 'number of first row containing data to copy
lngRowEnd = 17 'number of last row containing data to copy
'the "Copy" sheet be the active sheet in order to copy/paste (avoid run-time error 1004)
ThisWorkbook.Worksheets(copySheetName).Activate
For rw = lngRowStart To lngRowEnd
copySheet.Range(Cells(rw, 1), Cells(rw, 3)).Copy
Select Case Cells(rw, 2)
Case "a"
Set pasteSheet = ThisWorkbook.Worksheets("Sheet1")
Case "b"
Set pasteSheet = ThisWorkbook.Worksheets("Sheet2")
Case "c"
Set pasteSheet = ThisWorkbook.Worksheets("Sheet3")
Case Else
Debug.Print "Invalid Value: " & Cells(rw, 2) & " (row " & rw & ")"
GoTo SkipRow
End Select
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
SkipRow:
Next rw
Application.CutCopyMode = False
Set copySheet = Nothing
Set pasteSheet = Nothing
End Sub