含date标准的Sumifs
我想在我的VBA代码上使用Sumifs
函数,但是当条件是一个date时它失败了。
我有两个string代表月份和年份,如jan/2016
feb/2016
jan/2016
feb/2016
。
我将它们转换为date以获得像01/01/2016
和01/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
将产生相同的结果。