Hello again Michael,
Regardless, the following code may do the task for you:-
Application.ScreenUpdating = False
Dim lRow As Long
Dim lCol As Long
Dim i As Integer
Dim MySheet As String
lRow = Range("D" & Rows.Count).End(xlUp).Row
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
For i = lRow To 2 Step -1
MySheet = Cells(i, 4).Value
If Cells(i, 6) <> "" Then
Range(Cells(i, 1), Cells(i, lCol)).Copy Sheets(MySheet).Range("A" & Rows.Count).End(3)(2)
Range(Cells(i, 1), Cells(i, lCol)).Delete
Application.CutCopyMode = False
Application.ScreenUpdating = True
Following is the link to my test work book:-
The code transfers data to each individually named sheet (based on Column D names) as long as there is a value in Column F. The code then deletes the "used" data from the Payments sheet.
Click on the blue button to see the code at work.
I hope that this helps.
P.S. : I noticed that you are operating a Mac. I do not have any experience with Macs but I believe that Excel for Macs should still work fluently when VBA is added to a spread sheet. One way to find out!