Option Explicit
Sub Test()
Dim i As Long, lr As Long
Dim sh As Worksheet, wsD As Worksheet, ar As Variant
Application.ScreenUpdating = False
Set sh = Sheets("Master") '---->Change sheet name to suit.
lr = sh.Range("A" & Rows.Count).End(xlUp).Row
sh.Range("D1:D" & lr).AdvancedFilter 2, , sh.[Z1], 1 'Unique values moved temporarily to Column Z.
sh.Range("Z2", sh.Range("Z" & sh.Rows.Count).End(xlUp)).Sort [Z2], 1 'Unique values sorted.
ar = sh.Range("Z2", sh.Range("Z" & sh.Rows.Count).End(xlUp)) 'Unique values placed in an array.
For i = 1 To UBound(ar)
Set wsD = Sheets(CStr(ar(i, 1))) '---->Destination worksheets.
wsD.UsedRange.Clear '---->The destination sheets are all cleared prior to each data transfer.
With sh.[A1].CurrentRegion
.AutoFilter 4, ar(i, 1)
.Copy wsD.[A1]
.AutoFilter
End With
wsD.Columns.AutoFit
Next i
sh.Columns("Z").Clear 'Clear helper column to be used again as needed.
Application.Goto sh.[A1]
Application.ScreenUpdating = True
End Sub