我试图在我的VBA代码上使用Sumifs
功能,但是当条件是日期时它会失败。
我有两个代表月份和年份的字符串,例如jan/2016
和feb/2016
。
我将它们转换为日期以获得真实的"日期如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)
如果我没有输入日期,这可以起作用(返回一个值),但是我必须将这个总和限制一段时间。
我已经尝试更改日期列的数字格式,如下所示:
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)。
答案 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))
在日期范围内产生 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
将产生相同的结果。