Not elegant
Option Explicit
Sub MoveData()
Dim r As Long, c As Long, iStartCol As Long, n As Long
With ActiveSheet
For r = 2 To .Cells(1, 1).CurrentRegion.Rows.Count
For c = 1 To .Cells(1, 1).CurrentRegion.Columns.Count
Select Case Left(.Cells(r, c).Value, 1)
Case "A"
iStartCol = 8
Case "B"
iStartCol = 13
Case "C"
iStartCol = 18
Case "D"
iStartCol = 23
End Select
For n = iStartCol To iStartCol + 5
If Len(.Cells(r, n).Value) = 0 Then
.Cells(r, n).Value = .Cells(r, c).Value
Exit For
End If
Next n
Next c
Next r
End With
End Sub