Public Sub btnSum_Click()
Call SumDateRanges(Worksheets("Sheet1").Range("A2:B2"), Worksheets("Sheet3").Range("A2:B2"))
End Sub
Public Sub SumDateRanges(ByVal rngTotal As Range, ByVal rngData As Range)
Dim arrTotal As Variant
Dim arrData As Variant
Dim lngLastRow As Long
Dim intCol As Integer
Dim lngTotalRow As Long
Dim lngDataRow As Long
Dim datLast As Date
Dim lngCurrDataRow As Long
intCol = rngTotal.Cells(1, 1).Column
lngLastRow = rngTotal.Parent.Columns(intCol).Find(What:="*", After:=Cells(1, intCol), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
arrTotal = rngTotal.Resize(lngLastRow - rngTotal.Row + 1, rngTotal.Columns.Count)
intCol = rngData.Cells(1, 1).Column
lngLastRow = rngData.Parent.Columns(intCol).Find(What:="*", After:=Cells(1, intCol), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
arrData = rngData.Resize(lngLastRow - rngData.Row + 1, rngData.Columns.Count)
datLast = 0
For lngTotalRow = LBound(arrTotal) To UBound(arrTotal)
arrTotal(lngTotalRow, 2) = 0
For lngDataRow = LBound(arrData) To UBound(arrData)
If arrData(lngDataRow, 1) > datLast _
And arrData(lngDataRow, 1) <= arrTotal(lngTotalRow, 1) Then
arrTotal(lngTotalRow, 2) = arrTotal(lngTotalRow, 2) + arrData(lngDataRow, 2)
End If
Next lngDataRow
datLast = arrTotal(lngTotalRow, 1)
Next lngTotalRow
rngTotal.Resize(UBound(arrTotal), UBound(arrTotal, 2)) = arrTotal
Set rngData = Nothing
Set rngTotal = Nothing
End Sub