跨越给定时间范围的发生次数

时间:2017-06-29 13:30:24

标签: google-sheets

对于这个问题的标题感到抱歉,我想不出更好的方法来表达它。

我有一个包含时间范围的列,即

08:45-17:00

06:00-10:30

09:10-14:30

08:15-16:50

10:15-17:15

15:30-20:10

09:30-13:10

我需要的是跨越比较时间范围的那些事件的计数。例如,比较范围为11:00-15:00,计数应包括以下列中的任何一项: -

(1)。开始时间或结束时间在11:00到15:00之间

OR

(2)。在11:00之前开始,在15:00之后结束。

在上面的示例中,计数为5。

此公式为各个条目提供正确的结果(0或1):

=sum(if(or(and(mid(I14,7,5)>"15:00",mid(I14,1,5)<"11:00"),and(mid(I14,1,5)>"11:00",mid(I14,1,5)<"15:00"),and(mid(I14,7,5)>"11:00",mid(I14,7,5)<"15:00")),1,0))

可能有更优雅的写作方式!

围绕该代码包装arrayformula不起作用。

任何帮助非常感谢。提前谢谢。

这是Ed的公式(thx Ed)的GoogleSheets版本

= ARRAYFORMULA(COUNTA(滤波器(H9:H44,或(和(左(H9:H44,5)LT = “11:00”,右(H9:H44,5)GT =“15:00 “),和(左(H9:H44,5)GT =” 11:00" ,左(H9:H44,5)LT = “15:00”),和(右(H9:H44,5) &lt; =“15:00”,右(H9:H44,5)&gt; =“11:00”)))))

似乎Filter不喜欢使用“和”和“或”,因为无论条目如何,它总是返回1。

1 个答案:

答案 0 :(得分:0)

我相信这可以做你想要的。它使用counta和filter。 '+'是或者'*'是和。我把日期范围放在A1:A7中,所以调整到你的范围。

=arrayformula(COUNTA(FILTER( A:A ,(((right(A:A,5)>"15:00")*(left(A:A,5)<"11:00"))+(((left(A:A,5)>"11:00")*(left(A:A,5)<"15:00")))+(((left(A:A,5)>"11:00")*(LEFT(A:A,5)<"15:00")))+((right(A:A,5)>"11:00")*(RIGHT(A:A,5)<"15:00"))) )))