Sub test()
Dim dateCellsDict As Object
Dim lRow As Long, i As Integer, j As Integer
Dim cel As Range
Dim ws As Worksheet, oWs As Worksheet
i = 1
Set oWs = ThisWorkbook.Worksheets("Sheet1")
Set dateCellsDict = CreateObject("Scripting.Dictionary")
lRow = oWs.Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
ResetFilter oWs
With oWs.Range("H1:H" & lRow)
.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(0, "9/30/2016")
For Each cel In .Offset(1, 0).SpecialCells(xlCellTypeVisible)
dateCellsDict.Add Item:=cel, Key:=i
i = i + 1
Next
End With
For j = 1 To dateCellsDict.Count
ResetFilter oWs
Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
If j <> dateCellsDict.Count Then
With oWs.Range(dateCellsDict.Item(j).Offset(0, -7), dateCellsDict.Item(j + 1).Offset(-2, 4))
.AutoFilter Field:=1, Criteria1:=Application.Transpose(Range("lstName")), Operator:=xlFilterValues
.AutoFilter Field:=11, Criteria1:=Array("Offshore - MPI", "Offshore MPI", "US MPI"), Operator:=xlFilterValues
Sheet1.Range("A1:L1").Copy ws.Cells(1, 1)
.SpecialCells(xlCellTypeVisible).Copy ws.Cells(2, 1)
ws.Columns.AutoFit
ws.Name = Format(dateCellsDict.Item(j).Value, "mmddyyyy")
End With
Else
With oWs.Range(dateCellsDict.Item(j).Offset(0, -7), oWs.Range("L" & lRow))
.AutoFilter Field:=1, Criteria1:=Application.Transpose(Range("lstName")), Operator:=xlFilterValues
.AutoFilter Field:=11, Criteria1:=Array("Offshore - MPI", "Offshore MPI", "US MPI"), Operator:=xlFilterValues
Sheet1.Range("A1:L1").Copy ws.Cells(1, 1)
.SpecialCells(xlCellTypeVisible).Copy ws.Cells(2, 1)
ws.Columns.AutoFit
ws.Name = Format(dateCellsDict.Item(j).Value, "mmddyyyy")
End With
End If
Next
ResetFilter oWs
Application.ScreenUpdating = True
End Sub