Если у вас есть (например) 10 видимых строк, то это будет цикл от 1 до 10
For m = 1 To rng5.SpecialCells(xlCellTypeVisible).Rows.Count
Поэтому, когда вы находитесь (например) m = 5, это:
rng5.Cells(RowIndex:=m, ColumnIndex:="X")
будет указывать на 5-ю строку в rng5
.Это не обязательно то же самое, что и 5-я видимая строка в rng5
Ваш With
блок, похоже, не связан с содержащимся кодом, поэтому вы можете удалить его.
Попробуйте что-то вроде этого:
Sub Tester()
Dim rw As Range, rng5 As Range, mVal
Set rng5 = Sheet1.Range("A1").CurrentRegion
Set rng5 = rng5.Offset(1, 0).Resize(rng5.Rows.Count - 1) 'exclude headers
Sheet1.Range("A1").AutoFilter Field:=24, Criteria1:="="
For Each rw In rng5.SpecialCells(xlCellTypeVisible).Rows
If InStr(rw.Cells(1, "W").Value, "123") = 0 And _
InStr(rw.Cells(1, "V").Value, "Non") = 0 Then
mVal = rw.Cells(1, "M").Value
If InStr(mVal, "ABC") > 0 And InStr(mVal, "EFG") = 0 Then
rw.Cells(1, "X").Value = "XYZ"
ElseIf InStr(mVal, "MNO") > 0 And InStr(mVal, "567") = 0 Then
rw.Cells(1, "X").Value = "UVW"
End If
End If
Next rw
End Sub