Maybe :
Sub Test()
Dim coll As New Collection, collDummy As New Collection
Dim rngHeader1 As Range, rngHeader2 As Range, arrCri, arrTmp, i As Long, tot As Long, str1 As String, v1, v2
With Sheet1
arrCri = .Range("F2:I2").Value
arrTmp = .Range("B3").CurrentRegion.Value
End With
On Error Resume Next
For i = 2 To UBound(arrTmp, 1)
If (arrTmp(i, 1) >= arrCri(1, 1)) And (arrTmp(i, 1) <= arrCri(1, 2)) And (arrTmp(i, 2) >= arrCri(1, 3)) And (arrTmp(i, 2) <= arrCri(1, 4)) Then
Set collDummy = Nothing
tot = tot + 1
str1 = CStr(arrTmp(i, 1))
coll.Add key:=str1, Item:=Array(str1, collDummy)
coll(str1)(1).Add arrTmp(i, 2)
End If
Next i
On Error GoTo 0
ReDim arrTemp(1 To (tot + (coll.Count * 3)), 1 To 2)
With Sheets("Expected Output")
.Cells.Clear
i = 0: Set rngHeader1 = .Rows(1): Set rngHeader2 = .Rows(1)
For Each v1 In coll
arrTemp(i + 2, 1) = v1(0): Set rngHeader1 = Union(rngHeader1, Rows(i + 2))
arrTemp(i + 3, 1) = "Code": Set rngHeader2 = Union(rngHeader2, Rows(i + 3))
arrTemp(i + 3, 2) = "Date"
i = i + 3
For Each v2 In v1(1)
i = i + 1
arrTemp(i, 1) = v1(0)
arrTemp(i, 2) = v2
Next v2
Next v1
With .Range("B1").Resize(UBound(arrTemp, 1), UBound(arrTemp, 2))
.Value = arrTemp
.Borders.Weight = xlThin
Intersect(.Resize(, 1), rngHeader1).Interior.Color = 65535
Intersect(.Resize(, 2), rngHeader2).Interior.Color = 13434879
.Columns(2).NumberFormat = "DD-MMM"
.HorizontalAlignment = xlCenter
.EntireColumn.AutoFit
End With
.Rows(1).Clear
End With
End Sub
Bookmarks