Also y is Dim-ed as Long, so it won't like 1.5
I don't think you really need to loop the CheckBoxes since there's only a few. I'd keep it simple
Userform code
Option Explicit
Dim bInit As Boolean
Private Sub CheckBox1_Change()
If Not bInit Then FilterData
End Sub
Private Sub CheckBox2_Change()
If Not bInit Then FilterData
End Sub
Private Sub CheckBox3_Change()
If Not bInit Then FilterData
End Sub
Private Sub ExitButton_Click()
Me.Hide
Unload Me
End Sub
Private Sub UserForm_Initialize()
bInit = True
With Sheets("Sheet1")
.Range(("AM2"), Range("AM2").End(xlDown)).EntireRow.Hidden = False
End With
Application.EnableEvents = False
Me.CheckBox1 = True
Me.CheckBox2 = True
Me.CheckBox3 = True
Application.EnableEvents = True
bInit = False
End Sub
Standard Module
Option Explicit
Sub ShowTheForm()
Load UserForm1
UserForm1.Show vbModeless
End Sub
Sub FilterData()
Dim LengthRange As Range, LengthCell As Range
With Sheets("Sheet1")
Set LengthRange = .Range(("AM2"), Range("AM2").End(xlDown))
End With
Application.ScreenUpdating = False
For Each LengthCell In LengthRange.Cells
Select Case LengthCell.Value
Case 1
LengthCell.EntireRow.Hidden = Not UserForm1.CheckBox1
Case 1.5
LengthCell.EntireRow.Hidden = Not UserForm1.CheckBox2
Case 2
LengthCell.EntireRow.Hidden = Not UserForm1.CheckBox3
End Select
Next LengthCell
Application.ScreenUpdating = True
End Sub