O código abaixo assume que a planilha que contém os dados a serem copiados é denominada "Principal". Ele também pressupõe que suas folhas de "colagem" contêm cabeçalhos de coluna e, portanto, começará a colar na linha 2. Se não for o que você deseja, remova a .Offset(1, 0)chamada da linha que está fazendo a colagem.
Você provavelmente desejará um tratamento de erro melhor do que a Debug.Printlinha única , mas deixarei isso para você.
Testado no Excel 2007 e funcionando conforme o esperado.
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