This code should do what you need:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastCol As Integer, myRow As Long
Dim myRange As Range
If Target.Count > 1 Then Exit Sub
Set myRange = Target
If Target.Column = 16 Then
myRow = Target.Row
Application.EnableEvents = False
With ThisWorkbook.ActiveSheet
lastCol = .Cells(myRow, Columns.Count).End(xlToLeft).Column
If lastCol >= 18 Then
.Cells(myRow, 18).Resize(, lastCol - 17).Copy .Cells(myRow, 19)
End If
End With
Target.Offset(, 2) = Target
Target = ""
Application.EnableEvents = True
Set myRange = Target.Offset(, 2)
End If
If Intersect(myRange, [R6:AJ43]) Is Nothing Then Exit Sub
If Not myRange Like "[ud]*" Then myRange.Font.Name = "Arial": myRange.Font.Color = vbBlack: Exit Sub
Application.EnableEvents = False
myRange.Font.Name = "Arial"
With myRange.Characters(1, 1)
.Font.Name = "Marlett"
.Text = IIf(.Text = "u", "t", "u")
myRange.Font.Color = IIf(.Text = "u", vbRed, vbGreen)
End With
Application.EnableEvents = True
End Sub
Regards,
Antonio
Bookmarks