The following should do it.
Your original data needs to be in two columns in Sheet1
If you two balnk columns in your data, the macro will stop.
The reformatted data will be placed in Sheet2.
You can change the names of the sheets accordingly.
The "on error" is a lazy way to stop the macro when complete, with a bit of thought this can be done more neatly.
Dim off As Long
Dim printOff As Long
Dim thisCol As String
Dim nextCol As String
Dim thirdCol As String
Dim fourthCol As String
Dim counter As Long
Dim pageLength As Integer
Dim gapBetweenPages As Integer
On Error GoTo errorHandler:
' turn screen updating off to speed up macro
Application.ScreenUpdating = False
' read the range into an array
printItem = Selection.Value
thisCol = printItem(1, 1)
nextCol = printItem(1, 2)
pageLength = 47 ' set lines per page
gapBetweenPages = 5 ' lines between pages
Do While thisCol <> "" And nextCol <> ""
' point to next array element
' first time around is the same as above
off = off + 1
printOff = (printOff + 1) - 1 ' cell offset to write to is -1
'set the four variable to write
thisCol = printItem(off, 1)
nextCol = printItem(off, 2)
thirdCol = printItem(off + pageLength, 1)
fourthCol = printItem(off + pageLength, 2)
' write these variable to sheet
Selection.Offset(printOff, 0) = thisCol
Selection.Offset(printOff, 1) = nextCol
Selection.Offset(printOff, 2) = thirdCol
Selection.Offset(printOff, 3) = fourthCol
printOff = printOff + 1
counter = counter + 1
If counter = pageLength Then
'put spacing between pages
printOff = printOff + gapBetweenPages
counter = 0
' point to next element in array
off = off + pageLength
If Err.Number = 9 Then
Application.ScreenUpdating = True