将日期格式转换为时间格式

时间:2021-05-11 17:57:40

标签: excel vba

我在单元格 "A1" (Start Date)"B1" (End Date) 中有两个日期。我使用 SUMIFS 公式更改日期以获取日期之间的实际数字。

工作表中有 Date 列,带有 Time

所以我想要的是,每当 "A1" (Start Date) 改变它的时间应该总是像 00:00:00 一样初始,当我改变 "B1" (End Date) 的日期时它应该总是像 {{1}有什么方法可以使用 VBA 实现这一点。

您的帮助将不胜感激。

23:59:59

3 个答案:

答案 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

当您在 A1B1 中输入日期时,它会像在一天的开始一样输入。

如果您在 myDates 中的日期只是日期,您可以使用以下公式:

=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<=" & endDate)

但是,如果您在 myDates 中的日期也包含时间,那么您可以稍微修改公式:

=SUMIFS(sumRange,myDates,">=" & startDate,myDates,"<" & endDate+1)

并且您可以在任一实例中使用第二个公式

编辑:我刚刚注意到您将公式作为评论发布

我假设您只在 I1J1

中输入了日期(没有时间)

您发布的公式将有效除非 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)