If you familiar with VBA coding i found the following script which may help.. you would need to modify it however
It needs a sheet called "temp", and requires that every section be spaced by iRowsPerJob rows (see code).
Sub SortJobs()
Dim iR As Integer, jR As Integer
Dim ws1 As Worksheet, ws2 As Worksheet
Dim sFirstAdrs As String
Dim rFound As Range
Dim rCopy As Range
Dim nJobs As Long
Const iRowsPerJob As Integer = 13
Set ws1 = ThisWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Sheets("temp")
ws2.Cells.Clear
' copy the job numbers to "temp"
With ws1.Range("A:A")
Set rFound = .Find( _
What:="Job #:", _
After:=ws1.Range("a1"), _
LookIn:=xlValues)
sFirstAdrs = rFound.Address
Do
jR = jR + 1
ws2.Cells(jR, 1) = rFound.Offset(, 1) ' job #
Set rFound = .FindNext(rFound)
Loop While Not rFound Is Nothing And rFound.Address <> sFirstAdrs
End With
' sort by job number
ws2.UsedRange.Sort Key1:=ws2.Cells(1, 1), Order1:=xlAscending, _
Orientation:=xlSortColumns, Header:=xlNo
' cut the jobs in order to the bottom of the list
Application.EnableEvents = False
nJobs = ws2.Cells(Rows.Count, 1).End(xlUp).Row
Set rCopy = ws1.Range(sFirstAdrs).Offset(iRowsPerJob * nJobs)
For iR = 1 To nJobs
' the two-column range is necessary because of the merged cells
Set rFound = ws1.Range("B:C").Find( _
What:=ws2.Cells(iR, 1), _
LookIn:=xlFormulas, _
After:=ws1.Range("B1"))
ws1.Cells(rFound.Row, 1).Resize(iRowsPerJob).EntireRow.Cut
rCopy.Insert shift:=xlDown
Next
Application.EnableEvents = True
End Sub
Gluck