Dim myCell As Range Dim mySht As Worksheet Dim myName As String Dim myArea As Range Dim myShtName As String Dim KeyCol As String Dim myField As Integer
myShtName = ActiveSheet.Name KeyCol = "M"
Set myArea = Intersect(ActiveSheet.UsedRange, Range(KeyCol &
"1").EntireColumn).Cells
Set myArea = myArea.Offset(1, 0).Resize(myArea.Rows.Count - 1, 1)
On Error GoTo NoSheet myName = Worksheets(myCell.Value).Name GoTo SheetExists: NoSheet: Set mySht = Worksheets.Add(Before:=Worksheets(1)) mySht.Name = myCell.Value With myCell.CurrentRegion .AutoFilter Field:=myField, Criteria1:=myCell.Value .SpecialCells(xlCellTypeVisible).Copy _ mySht.Range("A1") mySht.Cells.EntireColumn.AutoFit .AutoFilter End With Resume SheetExists: Next myCell
For Each mySht In ActiveWorkbook.Worksheets
If mySht.Name = myShtName Then Exit Sub Else mySht.Move ActiveWorkbook.SaveAs ActiveSheet.Name & ".xlsx" ActiveWorkbook.Close End If Next mySht End Sub