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