try this in your sample file:
Sub blah()
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) 'delete this line later.
Dim SelRng As Range
Range("A1").CurrentRegion.Select 'delete this line if it's a nuisance.
On Error Resume Next
Set SelRng = Application.InputBox("Select the area to process (4 columns)" & vbLf & "Include column headers (KM, Leg, Org, Dest)" & vbLf & vbLf & "Make sure there's nothing you want to keep in the single column directly to the right of your selection.", "Area to process", Selection.Address, Type:=8)
On Error GoTo 0
If Not SelRng Is Nothing Then
Set myrng = SelRng.Resize(, 5)
myrng.Subtotal GroupBy:=1, Function:=xlCount, TotalList:=Array(5), SummaryBelowData:=0
Set ResultsRng = myrng.Resize(myrng.Rows.Count - 2, 1).Offset(2, 4).SpecialCells(xlCellTypeFormulas, 1).Offset(1)
With ResultsRng
For i = 1 To .Areas.Count
mystr = .Areas(i).Offset(, -2).Value
If i = .Areas.Count Then
Set rngmyStr2 = .Areas(i).Offset(, -1).Resize(myrng.Cells(myrng.Cells.Count).Row - .Areas(i).Row + 1) 'range the 2nd bit of the result
Else
Set rngmyStr2 = Range(.Areas(i).Offset(, -1), .Areas(i + 1).Offset(-2, -1)) 'range of the 2nd bit of the result
End If
If rngmyStr2.Rows.Count > 1 Then
myStr2 = Application.Transpose(rngmyStr2.Value)
zzz = Join(Array(mystr, Join(Application.Transpose(rngmyStr2.Value), " - ")), " - ")
Else
zzz = .Areas(i).Offset(, -2).Value & " - " & .Areas(i).Offset(, -1).Value
End If
.Areas(i).Value = zzz
Next i
End With
myrng.RemoveSubtotal
myrng.Cells(1).Offset(, 4).Select
Else
MsgBox "Process aborted"
End If
End Sub
Note that it relies entirely on changes in the values in column A, so if there happen to be 2 trips with the same values next to each other it will count them as one.
See comments in the code about the first line copying sheet1. Also attachment.