含date标准的Sumifs

我想在我的VBA代码上使用Sumifs函数,但是当条件是一个date时它失败了。

我有两个string代表月份和年份,如jan/2016 feb/2016 jan/2016 feb/2016

我将它们转换为date以获得像01/01/201601/02/2016这样的“真实”date

 month1 = CDate(string1) month2 = CDate(string2) 

我的范围是一个格式为Date( DateRange )的值,如04/ 04/01/2016 DateRange ,…

代码是:

 sumifs1 = Application.WorksheetFunction.SumIfs(Range1, Range2, var, DateRange, ">=" & month1, DateRange, "<" & month2) 

这工作(返回一个值),如果我不把date,但我必须限制一段时间的总和。

我已经试过像这样更改date列的数字格式:

 DateRange.NumberFormat = "dd/mm/yyyy" DateRange.NumberFormatLocal = "dd/mm/yyyy" 

试图格式化我的月份是这样的:

 month1 = Format$(CDate(string1), "dd/mm/yyyy") month2 = Format$(CDate(string2), "dd/mm/yyyy") 

但没有任何工作(返回0)。

我最终这样做了:

 month1 = CLng(CDate(string1)) month2 = CLng(CDate(string1)) sumifs1 = Application.WorksheetFunction.SumIfs(Range1, Range2, var, DateRange, ">=" & month1, DateRange, "<" & month2) 

在这里感谢@SeanC

在列A中的date和列B中的值中,在本例中:

 =SUMPRODUCT(--(A1:A20>=DATEVALUE("1/1/2016"))*(A1:A20<DATEVALUE("2/1/2016"))*(B1:B20)) 

在这里输入图像说明

产生date范围内列B值的总和。

VBA中

 Sub dural() Dim s1 As String, s2 As String, d1 As Date, d2 As Date Dim N As Long, ss As String Dim r1 As Range, r2 As Range s1 = "jan/2016" s2 = "feb/2016" d1 = CDate(s1) d2 = CDate(s2) Set r1 = Range("A1:A20") Set r2 = Range("B1:B20") For Each r In r1 If r.Value >= d1 And r.Value < d2 Then N = N + r.Offset(0, 1).Value End If Next r MsgBox N End Sub 

将产生相同的结果。