确定给定时间是否在开始和结束时间之间

时间:2018-02-03 00:10:50

标签: excel vba excel-vba excel-formula

我有两列有开始和结束时间的班次,我需要一个公式,如果NOW()处于班次/班次时返回(例如。TRUE / FALSE

enter image description here

答案我发现只使用MEDIAN,而且+ IF不起作用,因为班次可以从晚上开始并结束一天的时间。有人为此获得了优雅的解决方案吗?

在午夜过后,请记住这些情况。

5 个答案:

答案 0 :(得分:5)

使用:

=MEDIAN(MOD($C$1,1),-AND(A2>B2,B2>MOD($C$1,1))+A2,AND(A2>B2,B2<MOD($C$1,1))+B2)=MOD($C$1,1)

您可以使用NOW()替换所有$ C $ 1引用,或者只将=NOW()放入C1

enter image description here

enter image description here

enter image description here

答案 1 :(得分:3)

假设你在C1中有=NOW()(包括日期和时间),你可以使用这个公式:

=(MOD(C$1,1)<B2)+(MOD(C$1,1)>A2)+(B2<A2)=2

这是有效的,因为如果B2中的时间是&gt; A2 [班次在一天]的时间,然后前两个条件需要TRUE ....但如果B2中的时间是&lt; A2 [轮换两天],那么其中只有一个条件需要TRUE(或TRUE)。无论哪种方式,其中2个条件都需要TRUE

如果您在C1中使用此公式将返回没有日期的当前时间

=NOW()-TODAY()

...然后上述公式可以缩短为:

=(C$1<B2)+(C$1>A2)+(B2<A2)=2

见下面的截图

enter image description here

答案 2 :(得分:2)

尝试:

=OR(AND(B2-A2<0,OR($C$1<=B2,$C$1-A2>=0)),AND($C$1>=A2,$C$1<=B2))

您可以将$C$1替换为TEXT(NOW(),"hh:mm")来评估当前时间。

答案 3 :(得分:2)

Considering all compared values are in TIME format, you can try:

=MEDIAN(A2,IF(B2<A2,B2+1,B2),IF(C$1<A2,C$1+1,C$1))=IF(C$1<A2,C$1+1,C$1)

If however you need to compare it with current time using NOW(), you have to strip the time out of it like:

=NOW()-INT(NOW()) '/* this goes to C$1 */

I saw how well Scott did it and the logic is way too high (at least for me) so I decided to make something where the logic is pretty straight forward.

答案 4 :(得分:1)

由于您标记为&amp; ,您可以使用UDF:

Public Function onShift(rngStart As Date, rngEnd As Date) As Boolean
    Application.Volatile
    If rngStart > rngEnd Then
        If Time < rngEnd Then 'After midnight & in-shift
            rngStart = Date + rngStart - 1
            rngEnd = Date + rngEnd
        Else
            rngStart = Date + rngStart
            rngEnd = Date + rngEnd + 1
        End If
        If Now >= rngStart And Now <= rngEnd Then onShift = True
    Else
        If Time >= rngStart And Time <= rngEnd Then onShift = True
    End If
End Function

enter image description here

但我会坚持使用Scott的答案提供的工作表函数。

然而,使用UDF的好处是,您可以创建易于记忆的功能名称,完全符合您的需要。