在Excel中计算时间/天之间的时间

时间:2018-07-05 14:54:37

标签: excel

对于使用Excel解决的问题,我很难找到最佳解决方案。现在,我有一个很大的工作表,它在一个轴上有时间(列A是每个日期在1/1/2018到1/1/2019之间),并且在工作表中我有时间使用h:mm:ss函数间隔不同的细胞。

例如,对于1/1/2018-1/3/18行,起始时间为1/1/2018(例如8:00:00),然后终止时间为1/3 / 18(例如16:00:00)。 我想要计算的是这两个日期之间的时间以及该两个日期之间的时间。

这是在具有2000多个行的工作表上,并且每个间隔都不同(有些可能是三天,有些可能是同一天)。所有这些之间的区别是带有位置的另一列。看起来像:

第2行)日期,位置[A],到达时间(8:00:00),出发时间(空白)
 第3行)日期(第二天),位置[A](与上述相同),到达时间(空白),出发时间(16:00:00)

+---+----------+----------+---------+-----------+
|   |    A     |    B     |    C    |     D     |
+---+----------+----------+---------+-----------+
| 1 | Date     | Location | Arrival | Departure |
| 2 | 1/1/2018 | A        | 8:00    |           |
| 3 | 1/2/2018 | A        |         | 16:00     |
| 4 | 1/3/2018 | B        | 8:00    | 16:00     |
| 5 | 1/4/2018 | C        | 5:00    | 13:00     |
| 6 | 1/5/2018 | C        | 5:00    | 10:00     |
+---+----------+----------+---------+-----------+

我需要计算一个日期的到达时间与下一个日期的离开时间之间在位置[A]上花费的时间。

请让我知道您认为对此问题的最佳解决方案,我对任何事情都持开放态度!

+--------+----------+---------+-----------+------------------------+
| Date   | Location | Arrival | Departure | Time Spent in Location |
| 1/1/18 | A        | 8:00:00 | 16:00:00  | 8:00:00                |
| 1/2/18 | B        | 8:00:00 |           |                        |
| 1/3/18 | B        |         | 18:00:00  | 34:00:00               |
| 1/4/18 | C        | 8:00:00 |           |                        |
| 1/5/18 | C        |         |           |                        |
| 1/6/18 | C        |         | 16:00:00  | 56:00:00               |
+--------+----------+---------+-----------+------------------------+

上面的帖子非常准确-我遇到的麻烦是每个位置的时间间隔不同(并且是随机的)。我只是想简单地增加一列,以计算在每个位置花费的时间-从那里我将收集每个位置的数据以及在那里花费多少小时。

  • 此外,非常感谢您的帮助!发表评论的速度如此之快令我感到震惊-很抱歉我花了很多时间制作模型,希望这有助于使我的目标更加明确。

Actual Snip from sheet

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是在E2中使用以下公式并将其复制下来。

=IF(C3="",((A3+D3)-(A2+C2)),IF(D3<>"",D3-C3,""))

编辑:在上面的公式中D4-C4更改为D3-C3)

它的工作原理是将日期与时间结合起来,根据需要进行数学运算,然后将其去除。点击几个IF语句来处理单行位置或仅到达行的行。它还假定第一个条目不能是出发。

向urdearboy授予正确的自定义格式。您需要将列的单元格格式设置为[h]:mm

POC

选项2

这假设位置可以重复。使用辅助列可创建唯一的组合。

在F2中,使用以下公式并根据需要向下复制:

=COUNTIFS($B$2:B2,B2,$C$2:C2,"<>"&"")

锁定单元格的$非常重要。请注意复制后如何创建扩大范围。

现在从技术上讲,您可以将以下各项组合为一个怪异的公式,但是如果其他人必须处理它,或者您稍后再使用它,将很难遵循并且因此很难维护。因此,在该注释上,我将其分为另外2个帮助器列和公式

在G列中,我们将标识发生唯一位置的第一行。通过将位置名称和唯一ID号混合在一起来创建唯一位置,该唯一ID号是到目前为止它在列表中出现的频率的计数。就是A1是第一次到达位置A,E2是第二次到达位置2。在G2中,放入以下公式并记下来。

=AGGREGATE(15,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1)

现在识别出到达行,需要对离开行进行相同的操作。可以使用相同的公式,但将15更改为14。在H2中,放置以下公式:

=AGGREGATE(14,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1)

现在您已经确定了这些位置,可以使用以下公式计算时间:

=IF(D2="","",(INDEX(A:A,H2)+INDEX(D:D,H2))-(INDEX(A:A,G2)+INDEX(C:C,G2)))

在示例中,我将其放置在I2中,然后根据需要向下复制了F2:I2。但可以将其放置在E2中并轻松复制下来。

enter image description here

如果您不希望在G和H中使用其他辅助列,则可以将它们替换为时间公式,如下所示:

=IF(D2="","",(INDEX(A:A,AGGREGATE(14,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1))+INDEX(D:D,AGGREGATE(14,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1)))-(INDEX(A:A,AGGREGATE(15,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1))+INDEX(C:C,AGGREGATE(15,6,ROW($A$2:$A$16)/(B2&F2=$B$2:$B$16&$F$2:$F$16),1))))

使用monster公式进行整理的版本,因此不需要G和H列公式:

enter image description here

请记住将自定义格式应用于[h]:mm

的时间计算列