Here is the macro with some explanatory comments. I hope this helps.
Sub MoveCells()
    Application.ScreenUpdating = False 'turns screen refreshing off to prevent screen flickering and speed up the macro
    Dim LastRow As Long
    LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'finds last row with data
    Dim rng As Range
    For Each rng In Range("D1:D" & LastRow) 'loops through all the cells in column D
        If rng <> "" Then 'checks to make sure the cell is not blank
            Rows(rng.Row).Insert 'inserts blank row above
            rng.Resize(1, 3).Cut Cells(rng.Row - 1, 1) 'resizes the range to include columns D, E and F and then cuts it to the blank row above
        End If
    Next rng
    Application.ScreenUpdating = True 'turns screen refreshing back on
End Sub