Sub CopyRowsForNames4_4()
Dim Rng As Range
Dim D As Object
Dim Lap As Worksheet
Dim Van() As Boolean
Dim i As Long, j As Long, Z As Long
Dim X
Application.ScreenUpdating = False
Set Rng = ThisWorkbook.Sheets("YTD Pay").UsedRange 'Change name of the master sheet from "YTD Pay" and rename sheet in workbook if you want
Set D = CreateObject("Scripting.Dictionary")
'Read name sheets into array based on source of Data Validation list on sheet "Data Page" in column C:
For i = 2 To Sheets("Data Page").Range("c2").CurrentRegion.Rows.Count
If Sheets("Data Page").Cells(i, 3).Value <> "" Then D(CStr(Sheets("Data Page").Cells(i, 3).Value)) = ""
Next i
'-----------------------------------------------------------------
'add sheets based on name array above+ delete cells on existing name sheets:
ReDim Van(0 To D.Count - 1)
X = D.keys
For Each Lap In Sheets
For i = 0 To D.Count - 1
If Lap.Name = X(i) Then
Van(i) = True
Exit For
End If
Next i
Next Lap
For i = 0 To D.Count - 1
If Not Van(i) Then
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = X(i)
Else
Sheets(X(i)).Cells.Clear
End If
Next i
'-----------------------------------------
' add header to name sheets
With Sheets("YTD Pay")
.Select
.Range(Cells(8, 1), Cells(9, Rng.Columns.Count)).Copy
End With
For i = 0 To D.Count - 1
With Sheets(X(i))
.Select
.Cells(1, 1).Select
ActiveSheet.Paste
.UsedRange.Columns.AutoFit
End With
Next i
Application.CutCopyMode = False
'-----------------------------------------------------------------
'Copy rows (with appropriate names) from sheet "YTD Pay" to name sheets:
For i = 10 To Rng.Rows.Count
For j = 0 To D.Count - 1
If Sheets("YTD Pay").Cells(i, 6).Value = X(j) Then
Z = Sheets(X(j)).UsedRange.Rows.Count
Sheets(X(j)).Range(Cells(Z + 1, 1).Address, Cells(Z + 1, Rng.Columns.Count).Address) = _
Sheets("YTD Pay").Range(Cells(Sheets("YTD Pay").Cells(i, 6).Row, 1).Address, Cells(Sheets("YTD Pay").Cells(i, 6).Row, Rng.Columns.Count).Address).Value
End If
Next j
Next i
Sheets("YTD Pay").Select
Application.ScreenUpdating = True
End Sub