首页 文章

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

提问于
浏览
0

我在使用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

    一种可能的解决方案是在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号是到目前为止列表中出现频率的计数 . IE浏览器 . 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))))
    

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

    enter image description here

    请记住将自定义格式应用于[h]:mm的时间计算列

相关问题