Sub ParseItems() 'Based on selected column, data is filtered to individual workbooks
'workbooks are named for the value plus today's date
Dim LR As Long, Itm As Long, MyCount As Long, vCol As Long
Dim ws As Worksheet, MyArr As Variant, vTitles As String, SvPath As String
Dim temparr() As Variant
'Sheet with data in it
Set ws = Sheets("Sheet1")
'Path to save files into, remember the final \
SvPath = "C:\My Work Documents\"
'Range where titles are across top of data, as string, data MUST
'have titles in this row, edit to suit your titles locale
vTitles = "A3:E3"
'Choose column to evaluate from, column A = 1, B = 2, etc.
vCol = 5
'Spot bottom row of data
LR = ws.Cells(ws.Rows.Count, vCol).End(xlUp).Row
lc = ws.Cells(ws.Cols.Count, 3).End(xlLeft).Col
'Speed up macro execution
Application.ScreenUpdating = False
'Get a temporary list of unique values from key column
Set myrange = Range(Cells(3, 1), Cells(LR, lc))
Set Sortkey = Range(Cells(3, vCol), Cells(LR, vCol))
myrange.Sort key1:=Sortkey, order1:=xlAscending, MatchCase:=False, Header:=xlYes
'Put list into an array for looping (values cannot be the result of formulas, must be constants)
MyArr = Range(Cells(3, 1), Cells(LR, lc))
For i = 1 To LR - 2
' Find where the key column changes
For j = i To LR - 3
If MyArr(j, vCol) <> MyArr(j + 1, vCol) Then
' found next block
endj = j - i
Exit For
End If
Next j
' Now copy the block of identical items to a new sheet
ReDim temparr(1 To endj, 1 To lc)
For jj = 1 To endj
For k = 1 To lc
temparr(jj, k) = MyArr(jj + i, k)
Next k
Next jj
Itm = MyArr(j, vCol)
Workbooks.Add
Range(Cells(1, 1), Cells(endj, lc)) = temparr
ActiveWorkbook.SaveAs SvPath & MyArr(Itm) & Format(Date, " MM-DD-YY"), xlNormal
'ActiveWorkbook.SaveAs SvPath & MyArr(Itm) & Format(Date, " MM-DD-YY") & ".xlsx", 51 'use for Excel 2007+
ActiveWorkbook.Close False
Next i
'Cleanup
MsgBox "Rows with data: " & (LR - 1) & vbLf & "Rows copied to other sheets: " & MyCount & vbLf & "Hope they match!!"
Application.ScreenUpdating = True
End Sub