2017-10-17 80 views
2

我有員工時間表的日期和時間列表。時間從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

我的解決方案

爲了解決這個問題,我需要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^4被使用,因爲不精確的query

第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 

step3。獲取持續時間

在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
+0

絕對驚人!謝謝Max。您的解決方案不僅適用於您的解決方案,而且我非常感謝您的解釋,因此我可以理解它的工作原理。我非常感激! – Neill