Я не уверен, правильно ли я следую вашей логике, но вы можете попробовать.Это немного короче
Option Explicit
Sub update()
Dim rng1 As Range
Dim rng2 As Range
Dim i As Long
Dim ArrClear(0 To 2, 1 To 3) As Boolean
Dim Ws As Worksheet
For i = 9 To 29 Step 1
Set rng1 = ThisWorkbook.Sheets("hired").Range("O" & (i))
Set rng2 = ThisWorkbook.Sheets("hired").Range("J" & (i))
'Production
If rng1.Value2 = Range("C7").Value2 Then
If rng2.Value2 = "C" Then
ArrClear(0, 1) = True
ElseIf rng2.Value2 = "DC" Then
ArrClear(0, 2) = True
ElseIf rng2.Value2 = "P" Then
ArrClear(0, 3) = True
End If
ElseIf rng1.Value2 = Range("C8").Value2 Then
If rng2.Value2 = "C" Then
ArrClear(1, 1) = True
ElseIf rng2.Value2 = "DC" Then
ArrClear(1, 2) = True
ElseIf rng2.Value2 = "P" Then
ArrClear(1, 3) = True
End If
ElseIf rng1.Value2 = Range("C9").Value2 Then
If rng2.Value2 = "C" Then
ArrClear(2, 1) = True
ElseIf rng2.Value2 = "DC" Then
ArrClear(2, 2) = True
ElseIf rng2.Value2 = "P" Then
ArrClear(2, 3) = True
End If
End If
Next
For i = LBound(ArrClear()) To UBound(ArrClear())
If ArrClear(i, 1) Then
Range("K" & 7 + i).Value2 = ""
End If
If ArrClear(i, 2) Then
Range("J" & 7 + i).Value2 = ""
End If
If ArrClear(i, 3) Then
Range("I" & 7 + i).Value2 = ""
End If
Next i
End Sub