带有日期标准的 Sumifs

Sumifs with date criteria

我正在尝试在我的 VBA 代码上使用 Sumifs 函数,但是当标准是日期时它失败了。

我有两个代表月份和年份的字符串,例如 jan/2016feb/2016

然后我将它们转换为日期以获得 "real" 日期,例如 01/01/201601/02/2016

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

我的范围是一个格式为日期 (DateRange) 的列,其值类似于 04/01/201613/01/2016、...

代码是:

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

如果我不输入日期,这会起作用(return 一个值),但我必须用句点限制总和。

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

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

试着像这样格式化我的月份:

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

但没有任何效果 (returns 0)。

日期在 A 列,值在 B 列,那么在这个例子中:

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

产生日期范围内 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

将产生相同的结果。

我最后这样做了:

month1 = CLng(CDate(string1))
month2 = CLng(CDate(string1))

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

感谢@SeanC here