I don't see why you're doing a lot of that, but
1. I think you want Worksheet_Change and NOT Worksheet_SelectionChange
2. I think you need to disable events while you're updating the sheet
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
and turn them on when you leave
Dim a As Range, rng As Range
Dim counter As Long
Set rng = Sheets("Data").Range("C30:C187")
For Each a In rng
If (Sheets("Data").Range("C6") = "CP18" Or Sheets("Data").Range("C6") = "CP18 TM" Or Sheets("Data").Range("C6") = "M21Z" Or Sheets("Data").Range("C6") = "M25Z") _
And (a > 2.25 Or a < -2.25) Then
counter = counter + 1
a.Offset(0, 0).Interior.ColorIndex = 44
Sheets("Data").Range("H" & a.Row) = "Error " '& counter
Else
a.Offset(0, 0).Interior.ColorIndex = 0
Sheets("Data").Range("H" & a.Row) = ""
End If
Next a
Application.EnableEvents = True ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<