Yes I understand that, but was asking you about the general principle. Anyway, here is a different approach:
Sub x()
Dim r As Range, r1 As Range, n As Long, ws1 As Worksheet, ws2 As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error Resume Next
Sheets("Data").Delete
On Error GoTo 0
Set ws2 = Sheets.Add()
ws2.Name = "Data"
Set ws1 = Sheets("Sheet")
n = ws1.Range("A" & Rows.Count).End(xlUp).Row
ws1.Range("A1").Resize(n).AdvancedFilter xlFilterCopy, , ws2.Range("A1"), unique:=True
ws1.Range("B1").Resize(n).Copy ws2.Range("B1")
For Each r In ws2.Range("B2").Resize(n - 1)
r = Left(r, 4)
Next r
ws2.Range("B1").Resize(n).AdvancedFilter xlFilterCopy, , ws2.Range("C1"), unique:=True
For Each r In ws2.Range("A2", ws2.Range("A" & Rows.Count).End(xlUp))
For Each r1 In ws2.Range("C2", ws2.Range("C" & Rows.Count).End(xlUp))
ws1.Range("F" & Rows.Count).End(xlUp)(2) = r
ws1.Range("G" & Rows.Count).End(xlUp)(2).FormulaArray = "=MIN(IF(LEFT($B$2:$B$27,4)=" & Chr(34) & r1 & Chr(34) & ",IF($A$2:$A$27=" & Chr(34) & r & Chr(34) & ",VALUE(RIGHT($B$2:$B$27,LEN($B$2:$B$27)-1)))))"
ws1.Range("H" & Rows.Count).End(xlUp)(2).FormulaArray = "=MAX(IF(LEFT($B$2:$B$27,4)=" & Chr(34) & r1 & Chr(34) & ",IF($A$2:$A$27=" & Chr(34) & r & Chr(34) & ",VALUE(RIGHT($B$2:$B$27,LEN($B$2:$B$27)-1)))))"
ws1.Range("F2").CurrentRegion.Value = ws1.Range("F2").CurrentRegion.Value
Next r1
Next r
Sheets("Data").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Bookmarks