带有日期标准的 Sumifs
Sumifs with date criteria
我正在尝试在我的 VBA 代码上使用 Sumifs
函数,但是当标准是日期时它失败了。
我有两个代表月份和年份的字符串,例如 jan/2016
和 feb/2016
。
然后我将它们转换为日期以获得 "real" 日期,例如 01/01/2016
和 01/02/2016
month1 = CDate(string1)
month2 = CDate(string2)
我的范围是一个格式为日期 (DateRange
) 的列,其值类似于 04/01/2016
、13/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
我正在尝试在我的 VBA 代码上使用 Sumifs
函数,但是当标准是日期时它失败了。
我有两个代表月份和年份的字符串,例如 jan/2016
和 feb/2016
。
然后我将它们转换为日期以获得 "real" 日期,例如 01/01/2016
和 01/02/2016
month1 = CDate(string1)
month2 = CDate(string2)
我的范围是一个格式为日期 (DateRange
) 的列,其值类似于 04/01/2016
、13/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