因为ardt数据有空,在判断日期时提示不匹配,改为红的部份试试 Sub ff() Dim arDt As Variant Dim arRe() As Variant Dim oDic As Object Dim daSta As Date Dim daStp As Date Dim bDate As Boolean Dim iDct As Integer Dim iTmp As Integer Dim i As Integer Range("A2:D177").ClearContents With Sheet1 arDt = .Range("a3:f" & .[a65536].End(3).Row) End With 'arDt = Sheet1.Range("a3").CurrentRegion ReDim arRe(1 To UBound(arDt), 1 To 4) daSta = Range("f3").Value daStp = Range("h3").Value Set oDic = CreateObject("scripting.dictionary") For i = 4 To UBound(arDt) bDate = (DateValue(arDt(i, 1)) >= daSta) And (DateValue(arDt(i, 1)) <= daStp) If bDate Then iTmp = oDic(arDt(i, 3) & arDt(i, 4)) If iTmp = 0 Then iDct = iDct + 1 oDic(arDt(i, 3) & arDt(i, 4)) = iDct iTmp = iDct End If arRe(iTmp, 1) = iTmp arRe(iTmp, 2) = arDt(i, 3) arRe(iTmp, 3) = arDt(i, 4) arRe(iTmp, 4) = arRe(iTmp, 4) + arDt(i, 5) End If Next [a2].Resize(iDct, 4) = arRe End Sub |