I'd start with something like this
Option Explicit
Dim rSplit As Range, rPivot As Range
Dim ws As Worksheet
Sub AllocationReport()
'set up
Application.ScreenUpdating = False
Set rSplit = Worksheets("Split").Cells(1, 1).CurrentRegion
Set rPivot = Worksheets("Pivot").Cells(1, 1).CurrentRegion
Set ws = Worksheets("Allocation")
'clear old
With ws
Range(.Rows(3), .Rows(.Rows.Count)).Clear
End With
' Column numbers
' 1 2 3 4 5 6
' Split Cost Cen BS Vol Spc Asm Ssh
' 1 2 3 4 5 6
' Pivot Nom Vol Spc Asm Ssh Grand Total
' 1 7 13 19
' Alloc SPC VOL ASM SSH
Call pvtMove(4, 3, 1) ' SPC
Call pvtMove(3, 2, 7) ' VOL
Call pvtMove(5, 4, 13) ' ASM
Call pvtMove(6, 5, 19) ' SHH
'cleanup
Application.ScreenUpdating = True
End Sub
Private Sub pvtMove(colSplit As Long, colPivot As Long, colAlloc As Long)
Dim iOut As Long, iSplit As Long, iPivot As Long
iOut = 3
With ws
For iPivot = 2 To rPivot.Rows.Count
If rPivot.Cells(iPivot, colPivot).Value = 0 Then GoTo NextiPivot
.Cells(iOut, colAlloc).Value = rPivot.Cells(iPivot, 1).Value
.Cells(iOut, colAlloc + 1).Value = rPivot.Cells(iPivot, colPivot).Value
For iSplit = 2 To rSplit.Rows.Count
If rSplit.Cells(iSplit, colSplit).Value = 0 Then GoTo NextiSplit
.Cells(iOut, colAlloc).Value = rPivot.Cells(iPivot, 1).Value
.Cells(iOut, colAlloc + 2).Value = Round(rSplit.Cells(iSplit, 1).Value, 2)
.Cells(iOut, colAlloc + 3).Value = "'" & rSplit.Cells(iSplit, 2).Text
.Cells(iOut, colAlloc + 4).Value = Round(rSplit.Cells(iSplit, colSplit).Value, 2)
iOut = iOut + 1
NextiSplit:
Next iSplit
NextiPivot:
Next iPivot
End With
End Sub