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         '   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<