计算时间段是否包含在开始时间和结束时间之内

时间:2019-05-13 10:35:51

标签: excel excel-formula

我有一个问题,我试图在Excel中计算提供的工作时间段的任何部分是否包含在用户定义的时间段内,该时间段指定了夜间工作时间,例如2330-0559或0000-0630。

如果我提供了我想要的工作时间,并且该工作的任何部分都在指定的期限内,则需要对其进行识别。例如。以上两个示例都包含2230-0630的工作时间。

我可以尝试几种不同的解决方案,但仍然没有找到解决问题的正确方法。 也许有人可以帮忙。我还知道,由于excel在一天中的一部分从0-1开始工作,所以在一天结束时将excel中的24:00用于午夜,将00:00用作午夜。

sample solution

=OR(MOD(A5,1)>$E$2,MOD(A5,1)<$F$2)

3 个答案:

答案 0 :(得分:1)

我将分钟数设置为十进制,并使其在“ Duty start time”和“ Duty end time”的有效范围内。

检查您是否对此有任何理解

enter image description here

这里是示例:

https://drive.google.com/file/d/1O1B76srlY8sYQHsV_TiZVzi-7B_18eSj/view?usp=sharing


更新:很抱歉,缺少解释。在这里,我尽力澄清我是如何做到的。

转化

首先,我尝试将任何时间都转换为分钟,因此00:00是0分钟,01:00是60分钟,24:00(excel显示00:00)是1440分钟,25:00(excel显示01:00)是1500分钟。

我使用CONVERT(E2,"day", "mn")进行的转换,它确实可以将日期转换为分钟。

范围归一化和包含

现在每个范围都必须标准化,这意味着“结束”必须始终大于“开始”。在00:00到06:00之间可以正常工作,但在22:00到06:00则需要进行调整。因此,如果“开始”大于“结束”,那么我将1440分钟(24小时)添加到“结束”。我用IF(A6>B6, 1440,0)做。

然后,您需要查看是否有任何“占空比范围”包含“夜间范围”。通常用公式if (DutyEnd > NightStart AND DuttyStart < NightEnd) then TRUE完成。

挑战1

这是主要概念。但是,如果您尝试比较24:00-06-00中包含的00:00-06:00之类的范围,则无法正常工作。那是因为转换后的分钟数是0-360和1440-1830,所以它们彼此不包含。

在E3中,为了解决此问题,我使用模(MOD())缩减了1440,然后MOD(1440, 1440) =0。因此,即使您使用25:00或52:00之类的值,它们也会被削减减少到最小的分钟数。例如。 25:00(1500分钟)= 1:00 = 60分钟,52:00(3120分钟)= 4:00 = 240分钟

挑战2

我们还有另一个挑战,可能的比较如下:

  • 00:00-06:00中包含的00:00-06:00,以分钟为单位的0-390中包含的是0-390
  • 22:00-06:00所包含的00:00-06:00,以分钟为单位的1320-1830中所包含的0-390
  • 00:00-06:00所包含的22:00-06:00,以分钟为单位的0-390中所包含的1320-1830是

这最后两个将不匹配。这就是为什么在“包含”列(例如:E6)中,我将“夜晚标准”与1400和+ 1400进行比较的原因。

希望这有点清楚。否则让我知道。

答案 1 :(得分:0)

好吧,我想我缺少了一些东西,但让我们看看这是否对您有用。要使这项工作:

  
      
  1. 所有小时数必须以hh:mm格式输入
  2.   
  3. Night Criteria End必须在另一天。这意味着它必须超过00:00,否则公式将不起作用。如果您输入内容   例如start criteria=22:00night criteria= 23:50   会在同一天,所以公式将不起作用
  4.   
  5. 此公式仅在不到24小时的时间内起作用。如果任何时候标准之间的差异超过24小时,则公式将不起作用   正确。
  6.   

现在,我这样回复您的数据:

enter image description here

这里的技巧是处理没有日期的时间。 Excel中的日期为整数,小数部分为小时/分钟/秒。因此,要像这样正确比较小时数,您需要添加一个整数部分。

让我解释一下。在Excel中,18:00将为0.75。并且06:00将为0.25。如果您尝试获得两个时间之间的时差,您将得到-0,5。用十进制表示是有意义的,但是当尝试转换为时间时,对于Excel来说则没有意义。因此,正如我之前说的,这里的技巧是添加整数(在这种情况下,因为06:00低于18:00,我们将加+1),因此Excel将得出1,25-0,75 = 0, 5, Excel 可以将0,5转换为小时,它将准确返回12小时,正确的结果。

因此,知道这一点后,您的数据公式中的窍门就是以“开始”结尾,然后加上1或2以便与您的条件正确比较。这样,Excel可以确定时间是否晚于或早于条件。

我所有的公式都是这些:

  1. 长度:=IF(B5<A5;B5+1-A5;B5-A5)
  2. 跨午夜:=IF(Y(B5<A5;B5<>0);TRUE;FALSE)
  3. 从标准开始:=IF(AND(IF(A5<$E$2;A5+2;1+A5)>=1+$E$2;IF(A5<$E$2;A5+2;1+A5)<=$F$2+2);TRUE;FALSE)
  4. 在准则之间结束:=IF(AND(IF(B5<$E$2;B5+2;1+B5)>=1+$E$2;SI(B5<$E$2;B5+2;1+B5)<=$F$2+2);TRUE;FALSE)
  5. 任何部分:=IF(OR(E5=TRUE;F5=TRUE;AND(A5<$E$2;A5+C5>1+$F$2));TRUE;FALSE)

无论如何,我将文件上传到我的Gdrive中,以防下载和检查公式会有所帮助。

这是我得到的最好的。也许有更好的方法,但是我希望这可以帮助您,或者至少可以使它适应您的需求。

https://drive.google.com/open?id=1nrZKfyUhED_y6iiPRSUwRf7GhJlBYt-O

答案 2 :(得分:0)

POC

了解日期和时间的精彩

Excel中的日期存储为INTEGERS。它们代表自1900/01/1以来的日期,该日期为1。

时间以小数形式存储,代表一天的一部分。 24小时是1,0.5是中午12点。等

换句话说,小数点左边的是日期,而右边的是时间。

只需要时间和穿越午夜

从早晨的时间少于前一天的晚期的角度来看,这是有问题的。事实是它们更大。在我们的脑海中,我们进行了心理数学运算,知道第二天是,但是我们忽略了日期方面。

解决此问题的快速方法是将日期添加到您的时间中。数学将使生活变得更加轻松。但是,您可能不想在开始时间和结束时间添加完整日期。假设开始时间和结束时间不超过24小时,那么简单的解决方法是在结束时间小于开始时间时,将结束时间加1。这意味着第二天。

在您提供的示例日期中,插入了C列以更正结束时间。如果使用以下公式添加一个,则检查结束是否少于开始:

=B6+(B6<=A6)

括号中的部分是逻辑检查。它的计算结果为TRUE或FALSE。当excel通过数学运算符(不是诸如sum之类的函数)运行布尔值(TRUE或FALSE)时,它将TRUE转换为1,而FALSE转换为0。

长度

C减去A的直截了当的数学运算,因为C总是在您开始之后,并且是两个数字中的较大者。

=C6-A6

穿越午夜

当开始时间或结束时间恰好是午夜时,在定义午夜时需要格外小心。从技术上讲,如果您启动或停止它,就不会越过它。区别实际上是<与<=或>与> =。我会留给你整理一下。对于我使用的数学:

=AND(A6<1,C6>=1)

尽管我没有将此列用于其他任何用途

开始检查

=OR(A6>$F$2,A6<$G$2)

结束检查

=OR(B6>$F$2,B6<$G$2)

随时检查

我将其分为三列。它可以合并为一个,但想显示其工作部分。首先要检查开始时间是否在夜间开始之前,而班次结束时间是否在夜间开始时间之后。第二次检查与第一个检查类似,只是您想知道开始时间是否在夜间结束时间之前,而轮班结束时间是否在夜间结束时间之后。对于OR情况,您要检查F到I列中的任何一个是否为真:

COLUMN H
=AND(A6<=$F$2,C6>$F$2)

COLUMN I
=AND(A6<$G$2+1,C6>$G$2+1)

请记下+1作为夜间结束时间。这是为了反映结束时间实际上是在第二天。

COLUMN J
=OR(F6,G6,H6,I6)
or
=(F6+G6+H6+I6)>=1

将以上公式放在第6行中,并根据需要向下复制