Try
Sub test()
Dim a, i As Long, ii As Long, iii As Long, iv As Long, n As Long
Dim myMin As Long, myMax As Long, SL As Object
Application.ScreenUpdating = False
With Sheets("sheet1").Cells(1).CurrentRegion
a = .Value
myMin = Application.Min(.Columns(1))
myMax = Application.Max(.Columns(1))
End With
Set SL = CreateObject("System.Collections.SortedList")
For i = 2 To UBound(a, 1)
If Not SL.Contains(a(i, 2)) Then
Set SL(a(i, 2)) = CreateObject("Scripting.Dictionary")
End If
SL(a(i, 2))(a(i, 1)) = Application.Index(a, i, 0)
Next
With Sheets("sheet2")
.Columns("a:c").Clear: n = 4
For i = 0 To SL.Count - 1
ReDim a(1 To myMax - myMin + 3, 1 To 3)
a(1, 2) = "Export": iii = 2
a(2, 1) = "Period": a(2, 2) = "Code": a(2, 3) = "Trade Value"
For ii = myMin To myMax
iii = iii + 1: a(iii, 1) = ii
If SL.GetByIndex(i).exists(ii) Then
For iv = 1 To 3
a(iii, iv) = SL.GetByIndex(i)(ii)(iv)
Next
End If
Next
With .Cells(n, 1).Resize(UBound(a, 1), 3)
.Value = a: .Borders.Weight = 2
With .Rows("1:2")
.Font.Bold = True
.HorizontalAlignment = xlCenter
With .Cells(1, 2).Resize(, 2)
.Interior.Color = 5296274
.Merge
End With
End With
.Columns(3).NumberFormat = """$""#,##0"
End With
n = n + myMax - myMin + 5
Next
End With
Application.ScreenUpdating = True
End Sub
Bookmarks