Uses intrinsic Excel capability (Filter) to avoid looping


Option Explicit
Const iLimit As Long = 18

Sub HighlightCells()
    
    ActiveSheet.Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:=">" & iLimit, Operator:=xlAnd
    
    On Error Resume Next
    Intersect(ActiveSheet.Columns(1).SpecialCells(xlCellTypeVisible), ActiveSheet.AutoFilter.Range).Interior.Color = vbRed
    On Error GoTo 0
    
    ActiveSheet.AutoFilterMode = False

End Sub


You might have to tweak it if there's column headers

Option Explicit
Const iLimit As Long = 18
Sub HighlightCells()
    Dim r As Range
    
    With ActiveSheet
        .Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:=">" & iLimit, Operator:=xlAnd
    
        On Error Resume Next
        Set r = Intersect(.Columns(1).SpecialCells(xlCellTypeVisible), .AutoFilter.Range)
        Set r = Intersect(r, Range(.Rows(2), .Rows(.Rows.Count)))
        r.Interior.Color = vbGreen
        On Error GoTo 0
    
        .AutoFilterMode = False
    End With
End Sub