我在单元格 "A1" (Start Date)
和 "B1" (End Date)
中有两个日期。我使用 SUMIFS
公式更改日期以获取日期之间的实际数字。
工作表中有 Date
列,带有 Time
。
所以我想要的是,每当 "A1" (Start Date)
改变它的时间应该总是像 00:00:00
一样初始,当我改变 "B1" (End Date)
的日期时它应该总是像 {{1}有什么方法可以使用 VBA 实现这一点。
您的帮助将不胜感激。
23:59:59
答案 0 :(得分:1)
如果我正确理解您的问题,我认为这可行。
它将确保 A1 为整数,并使 B1 为整数,然后加上 0.99999。
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
Range("A1").value = cint(range("A1").value)
Range("B1").value = cint(range("B1").value) + 0.99999999
End if
只需确保将单元格设置为显示为日期和时间。
答案 1 :(得分:1)
如果我理解正确,您就无需费心处理日期的时间部分或尝试更改它的机制。
您只需要正确构建您的 SUMIFS
公式。
sumRange
myDates
当您在 A1
或 B1
中输入日期时,它会像在一天的开始一样输入。
如果您在 myDates
中的日期只是日期,您可以使用以下公式:
=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<=" & endDate)
但是,如果您在 myDates
中的日期也包含时间,那么您可以稍微修改公式:
=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<" & endDate+1)
并且您可以在任一实例中使用第二个公式
编辑:我刚刚注意到您将公式作为评论发布
我假设您只在 I1
和 J1
您发布的公式将有效除非 C:C
包括带有日期的时间。如果它确实包含带有日期的时间,请尝试:
=SUMIFS(D:D,E:E,"<>Pending for Payment",B:B,H2,C:C,">="&$I$1,C:C,"<"&$J$1+1)
通过将 1
添加到日期,我们将其移至后一天的开始;因此我们将 <=
更改为仅 <
并包含您想要的所有日期。
答案 2 :(得分:1)
数字时间23:59:59不等于0.9999999,是0.999988425925926
但是为此使用本机日期/时间处理并避免使用智能数字:
Range("A1").Value = DateValue(Range("A1").Value)
Range("B1").Value = DateValue(Range("B1").Value) + TimeSerial(23, 59, 59)