Try the following code:-
Dim dic As Object, rng As Range, wks As Worksheet, mypath As String, lr As Long
Set dic = CreateObject("scripting.dictionary")
Set wks = Sheet1
mypath = ThisWorkbook.Path & "\"
lr = wks.Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For nrow = lr To 2 Step -1
If (Not dic.exists(.Cells(nrow, "A").Value)) Then
dic.Add .Cells(nrow, "A").Value, .Cells(nrow, "A").Value
Set rng = .Range("A1:N" & .Cells(Rows.Count, 1).End(xlUp).Row)
rng.AutoFilter field:=1, Criteria1:=.Range("A" & nrow).Value
ActiveWorkbook.SaveAs Filename:=mypath & .Range("A" & nrow).Value & ".xlsx"
.AutoFilterMode = False
MsgBox "Done!", vbExclamation
Application.CutCopyMode = False
Application.ScreenUpdating = True
The code assumes that the names are in Column A and it will create a new work book for each name in Column A with the relevant data for each individual being transferred to each individual work book.
Each new work book will be stored in the same folder as the originating work book.
Do you really want to create a new work book for each individual? It is quite possible that your list of names could become very long and creating a new work book for each individual could become a major drain on resource. Would you not prefer to have one work book with a separate work sheet for each individual?
I hope that this helps.