Bem, não sei por que você tem a Target.Cells.Count
check, mas estou deixando-a se você precisar.
O principal problema que vi em seu código foi que você está verificando o valor da coluna C para saber se é um valor numérico, mas deseja uma string. Portanto, seu código IsNumeric(Target.Value)
sempre retornava falso quando você digita "S na coluna C. Então, eu retirei isso.
O código abaixo funcionará para toda a coluna C:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Not Intersect(Range("$C:$C"), Target) Is Nothing Then
If Target.Value = "S" Then
swap Target
End If
End If
End Sub
Sub swap(rng As Range)
Dim cellVal As String
cellVal = rng.Offset(0, -2).Value
rng.Offset(0, -2).Value = rng.Offset(0, -1).Value
rng.Offset(0, -1).Value = cellVal
End Sub