我有两列有开始和结束时间的班次,我需要一个公式,如果NOW()
处于班次/班次时返回(例如。TRUE
/ FALSE
)
答案我发现只使用MEDIAN,而且+ IF不起作用,因为班次可以从晚上开始并结束一天的时间。有人为此获得了优雅的解决方案吗?
在午夜过后,请记住这些情况。
答案 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
答案 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
见下面的截图
答案 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)
由于您标记为vba&amp; excel-vba,您可以使用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
但我会坚持使用Scott的答案提供的工作表函数。
然而,使用UDF的好处是,您可以创建易于记忆的功能名称,完全符合您的需要。