查找许多重叠时间的总持续时间

时间:2017-10-17 22:51:17

标签: google-sheets formula overlap

我有一份员工时间表的日期和时间列表。时间从列F开始,到列G结束。有时项目的重叠时间。员工没有为重叠项目获得报酬,但我们需要单独跟踪每个项目。我希望能够查看E,F和G列并查找任何重叠项目,并返回单个时间条目。在下面的示例中,请注意第1行不与其他行重叠,但第2-6行中有一系列重叠的条目。它们不一定都是重叠的,但更像是一条链条。"我想写一个公式(不是脚本)来解决这个问题。

+---+------------+------------+----------+
|   |     E      |       F    |    G     |
+---+------------+------------+----------+
| 1 | 10/11/2017 | 12:30 PM   |  1:00 PM |
| 2 | 10/11/2017 |  1:00 PM   |  3:00 PM |
| 3 | 10/11/2017 |  2:15 PM   |  6:45 PM |
| 4 | 10/11/2017 |  2:30 PM   |  3:00 PM |
| 5 | 10/11/2017 |  2:15 PM   |  6:45 PM |
| 6 | 10/11/2017 |  3:00 PM   |  6:45 PM |
+---+------------+------------+----------+

我想评估这些列并返回每个"链的总持续时间"在一系列重叠的最后一行。在下面的示例中,我们将其放在H列中。从第2行开始到第6行(下午1点到6点45分)结束的系列发现5.75小时。

+---+------------+------------+----------+------------+
|   |     E      |       F    |    G     |      H     |
+---+------------+------------+----------+------------+
| 1 | 10/11/2017 | 12:30 PM   |  1:00 PM |    0.5     |
| 2 | 10/11/2017 |  1:00 PM   |  3:00 PM |  overlap   |
| 3 | 10/11/2017 |  2:15 PM   |  6:45 PM |  overlap   |
| 4 | 10/11/2017 |  2:30 PM   |  3:00 PM |  overlap   |
| 5 | 10/11/2017 |  2:15 PM   |  6:45 PM |  overlap   |
| 6 | 10/11/2017 |  3:00 PM   |  6:45 PM |   5.75     |
+---+------------+------------+----------+------------+

我尝试过写查询,但一开始就找回自己。如果有人有任何建议,我很乐意知道!提前谢谢。

尼尔

1 个答案:

答案 0 :(得分:2)

我的解决方案

要解决这个问题,我需要2个额外的列:

enter image description here

步骤1.返回“重叠”或“确定”

当一端在另一端内时,两条线重叠:

enter image description here

我制作了query公式来检查:

=if(QUERY(ArrayFormula({value(E1:E+F1:F),VALUE(E1:E+G1:G)}), "select count(Col1) where Col1 < "&value(G1+E1-1/10^4)&" and Col2 > "&value(F1+E1+1/10^4)&" label Count(Col1) ''",0)>1,"overlap","ok")

向下拖动公式。结果是列:

ok
overlap
overlap
overlap
overlap
ok
ok
overlap
overlap
overlap
overlap
ok

在公式中:

  • value用于比较数字。必须比较每个削减:日期+时间。
  • -1/10^4+1/10^4query
  • 中的不精确而被使用

步骤2.获取时间链

这部分很棘手。只有在示例中对数据进行排序时,我的解决方案才有效。

在单元格I1中输入1。在单元格I2中输入公式:

=if(or(and(H1=H2,H2="overlap"),and(H2="ok",H1="overlap")),I1,I1+1)

向下拖动公式。结果是列:

1
2
2
2
2
2
3
4
4
4
4
4

步骤3。获取持续时间

在J4中粘贴并复制公式:

=if(H1="ok", round(QUERY(ArrayFormula({value(E:E+F:F),VALUE(E:E+G:G),I:I}), "select max(Col2) - min(Col1) where Col3 = "&I1 &" label max(Col2) - min(Col1) ''")*24,2),"")

查询按步骤获取最长持续时间,在步骤2中找到。

    由于round 不精确,因此使用
  • query