Обернуть объекты Range с помощью оператора With
.Попробуйте заменить имена переменных на что-то более значимое.Я только изменил один.Кроме того, используйте Option Explici
t в верхней части кода и объявите все переменные с типом.
Option Explicit
Public Sub test()
Dim ws As Worksheet, iCell As Range, m14 As Long, s14 As Long, ss14 As Long
Set ws = ThisWorkbook.Worksheets("Installation")
With ws
For Each iCell In .Range("G2", .Range("G" & .Rows.Count).End(xlUp))
Select Case LCase(iCell.Value)
Case "main"
m14 = m14 + 1: s14 = 0: ss14 = 0
iCell.Offset(, -6).Value = m14
Case "sub"
s14 = s14 + 1: ss14 = 0
iCell.Offset(, -6) = m14 & "." & s14
Case "sub-sub"
ss14 = ss14 + 1
iCell.Offset(, -6) = m14 & "." & s14 & "." & ss14
End Select
Next iCell
End With
End Sub