Code:
Sub kTest_v1()
Dim wksPurch As Worksheet, wksSales As Worksheet, dtCurrent As Date
Dim ka, k(), i As Long, n As Long, t(), wksSummary As Worksheet
Dim Concat As String
Set wksPurch = Worksheets("Purchase")
Set wksSales = Worksheets("Sales")
Set wksSummary = Worksheets("Summary")
i = wksPurch.UsedRange.Rows.Count + wksSales.UsedRange.Rows.Count
ReDim k(1 To i, 1 To 7)
With CreateObject("scripting.dictionary")
.comparemode = 1
dtCurrent = wksPurch.Range("b1")
ka = wksPurch.Range("a1").CurrentRegion.Resize(, 6).Offset(1)
For i = 2 To UBound(ka, 1)
If Len(ka(i, 1)) * Len(ka(i, 2)) * Len(ka(i, 3)) Then
Concat = Trim$(ka(i, 1) & "|" & ka(i, 2))
If Not .exists(Concat) Then
n = n + 1
k(n, 1) = Trim$(ka(i, 1))
k(n, 2) = Trim$(ka(i, 2))
k(n, 3) = ka(i, 5)
If dtCurrent - CDate(ka(i, 4)) > 60 Then k(n, 6) = ka(i, 5)
k(n, 5) = "=RC[-2]-RC[-1]"
k(n, 7) = "=RC[-2]-RC[-1]"
.Add Concat, Array(n, 7)
Else
t = .Item(Concat)
k(t(0), 3) = k(t(0), 3) + ka(i, 5)
If dtCurrent - CDate(ka(i, 4)) > 60 Then
k(t(0), 6) = k(t(0), 6) + ka(i, 5)
End If
End If
End If
Next
ka = wksSales.Range("a1").CurrentRegion.Resize(, 6)
For i = 2 To UBound(ka, 1)
If Len(ka(i, 1)) * Len(ka(i, 2)) * Len(ka(i, 3)) Then
Concat = Trim$(ka(i, 1) & "|" & ka(i, 2))
If .exists(Concat) Then
t = .Item(Concat)
k(t(0), 4) = k(t(0), 4) + ka(i, 5)
k(t(0), 6) = Application.Max(0, k(t(0), 6) - ka(i, 5))
End If
End If
Next
End With
If n Then
With wksSummary
.Range("a2").Resize(n, 7).Value = k
End With
End If
End Sub
HTH
Bookmarks