Я только что продолжил настройку, поэтому немного минимизировать код можно:
Использование Elseif:
Option Explicit
Sub UseElseIf()
Dim LookupRange As Range
Dim c As Variant
Dim Selectedcell As Variant
Set LookupRange = Range("R1:R25")
For Each c In LookupRange
Cells(c.Row, 15).Activate
Selectedcell = ActiveCell
If InStr(Selectedcell, "PLATE") > 0 Then
Cells(c.Row, 18).FormulaR1C1 = "PP07"
ElseIf InStr(Selectedcell, "PIPE") > 0 Then
Cells(c.Row, 18).FormulaR1C1 = "PP10"
ElseIf InStr(Selectedcell, "NUT") > 0 Then
Cells(c.Row, 18).FormulaR1C1 = "PP02"
ElseIf InStr(Selectedcell, "STUD") > 0 Then
Cells(c.Row, 18).FormulaR1C1 = "PP02"
ElseIf InStr(Selectedcell, "BOLT") > 0 Then
Cells(c.Row, 18).FormulaR1C1 = "PP02"
End If
'ELSE IF
'Cells(c.Row, 18).FormulaR1C1 = "PP07"
Next c
Cells(9, 2).Activate
End Sub
Наиболее эффективным способом, на мой взгляд, в этом случае должно быть использование оператора CASE.
Sub UseCase()
Dim LookupRange As Range
Dim c As Variant
Dim Selectedcell As Variant
Set LookupRange = Range("R1:R25")
For Each c In LookupRange
Selectedcell = Cells(c.Row, 15).Value
Select Case Selectedcell
Case "PLATE"
Cells(c.Row, 18).FormulaR1C1 = "PP07"
Case "PIPE"
Cells(c.Row, 18).FormulaR1C1 = "PP10"
Case "NUT"
Cells(c.Row, 18).FormulaR1C1 = "PP02"
Case "STUD"
Cells(c.Row, 18).FormulaR1C1 = "PP02"
Case "BOLT"
Cells(c.Row, 18).FormulaR1C1 = "PP02"
End Select
'ELSE IF
'Cells(c.Row, 18).FormulaR1C1 = "PP07"
Next c
Cells(9, 2).Activate
End Sub
Конечно, есть более эффективные способы сокращения кодов, если мы переписываем / реструктурируем их больше.