ok. maybe, to me, wording it like "i dont want blank cells be processed" would be better. sorry for my poor English.
try this with a copy of your file.
Sub CreateSheets_CopyData()
Dim cll As Range
Dim rngResults As Range 'filter range
Dim rngFilter As Range 'filter range
Dim rngUniques As Range 'Unique Range
Dim LMngr As String
Dim UqLM
Dim LastRow As Long, calc As Long, i As Long
Const StartRow As Long = 5
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
calc = .Calculation
.Calculation = xlCalculationManual
End With
With Worksheets("Unique Records")
If .AutoFilterMode Then .AutoFilterMode = False
LastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
Set rngResults = .Range("A1:N" & LastRow)
Set rngFilter = .Range("O4:O" & LastRow)
For Each cll In rngFilter.Offset(1).Resize(rngFilter.Rows.Count - 1)
If InStr(LMngr, cll.Value) = 0 Then LMngr = LMngr & "|" & cll.Value
Next cll
UqLM = Application.Transpose(Split(Mid(LMngr, 2), "|"))
End With
For i = LBound(UqLM) To UBound(UqLM)
rngFilter.AutoFilter Field:=1, Criteria1:=UqLM(i, 1)
Worksheets.Add After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = UqLM(i, 1)
rngResults.SpecialCells(xlCellTypeVisible).Copy
With .Range("A1")
.PasteSpecial
.Select
End With
.Columns.AutoFit
LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
If LastRow >= StartRow Then
With .Range("C5:N" & LastRow)
For Each cll In .SpecialCells(xlCellTypeConstants, 1)
cll.Value = 1 - cll.Value
If cll.Value = 0 Then cll.Value = "NSR"
Next cll
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Key2:=.Cells(1, 2), Order2:=xlAscending
End With
End If
End With
rngFilter.Parent.AutoFilterMode = False
Next i
Worksheets("Unique Records").Select
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationManual
End With
End Sub