如何查找两个日期时间excel或MS访问之间的一天中的小时

时间:2016-12-21 16:48:26

标签: excel datetime ms-access

我有一份报告,我应该在发布日期时间和完成日期时间之间收集当天不同时段的数据。例如IssueDateTime = 12/19/2016 10:00 AM和CompletedDateTime = 12/19/2016 3:00 PM我希望该公式能够在上午10:00,上午11:00,中午12:00,下午1:00返回,下午2:00,下午3:00。不知道这是否可能,但任何见解将不胜感激。

2 个答案:

答案 0 :(得分:0)

此公式将返回小时数组:

=TEXT(ROW(INDIRECT(HOUR(IssueDateTime) & ":" & HOUR(CompletedDateTime)))/24,"hh:mm AM/PM")

对于您的示例,公式返回:

{"10:00 AM";"11:00 AM";"12:00 PM";"01:00 PM";"02:00 PM";"03:00 PM"}

但是当输入单个单元格时,您将只看到第一个元素。

您可以通过输入公式作为数组或使用INDEX函数来显示完整结果。

如果您不熟悉Excel中的数组,建议您阅读Excel和MSDN上的帮助主题,另请参阅Chip Pearsons Introduction to Array Formulas

这是一个例子。数组公式已输入B4:B17,并使用条件格式将#N/A结果显示为空白。

enter image description here

答案 1 :(得分:0)

以下是如何使用VBA / Access执行相同的操作:

cdate(DatePart("h",Now())& ":00")

这将在下午1:00:00返回当前时间(下午1:12)

要获得一小时,请使用:

DatePart("h",Now())

这是一个简单的函数,它返回两个不同时间之间的所有小时块:

Public Function ShowHourBlocks(StartTime As Date, EndTime As Date) As String

    Dim StartBlock As Date
    Dim EndBlock As Date
    Dim Answer As String

    StartBlock = CDate(DatePart("h", StartTime) & ":00")
    EndBlock = CDate(DatePart("h", EndTime) & ":00")

    Do While StartBlock <= EndBlock

        Answer = Answer + Format(StartBlock, "h:mm AMPM") & " "
        StartBlock = DateAdd("h", 1, StartBlock)

    Loop


    ShowHourBlocks = Answer

End Function

以下是在即时窗口中运行时返回的内容:

?ShowHourBlocks(now(), DateAdd("h",4,Now()))
1:00 PM 2:00 PM 3:00 PM 4:00 PM 5:00 PM