Sumifs与日期标准

时间:2016-06-21 16:57:50

标签: excel vba excel-vba date sumifs

我试图在我的VBA代码上使用Sumifs功能,但是当条件是日期时它会失败。

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

我将它们转换为日期以获得真实的"日期如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)

如果我没有输入日期,这可以起作用(返回一个值),但是我必须将这个总和限制一段时间。

我已经尝试更改日期列的数字格式,如下所示:

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)。

2 个答案:

答案 0 :(得分:1)

我最终这样做了:

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

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

感谢@SeanC here

答案 1 :(得分:0)

A 中的日期和 B 列中的值,然后在此示例中:

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

enter image description here

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

将产生相同的结果。