计算工作时间并按员工在重叠数据数组中排序的公式

时间:2019-06-14 03:51:31

标签: excel

我有一个.XLXS表,其中包含工作人员名称,开始时间和结束时间。我想显示工人在忽略重叠期间的总工作时间。 例如,如果“鲍勃”在0800到1400之间工作,并且在0900到1300之间工作,则该天的总时间应为6小时。如果“乔”工作0700至0900,则该天的时间为2个小时。

工人的数量各不相同,六个月的数据约为2100行。

“巴里·胡迪尼”(barry houdini)到“ Formula that will calculate total hours in overlapping date array”提供的公式仅适用于一名工人,但我对Excel的了解还不足以使其适合多名工人。

=SUMPRODUCT((COUNTIFS(B:B,"<"&MIN(B:B)+ROW(INDIRECT("1:"&ROUND((MAX(C:C)-MIN(B:B))*1440,0)))/1440-1/2880,C:C,">"&MIN(B:B)+ROW(INDIRECT("1:"&ROUND((MAX(C:C)-MIN(B:B))*1440,0)))/1440-1/2880)>0)+0)/60


MOD_BY  START_DATETIME  END_DATETIME        total time  
bob     1/2/19 17:30    1/2/19 18:45        3.2500  
bob     1/2/19 21:00    1/2/19 21:15            
bob     1/2/19 21:00    1/2/19 22:00            
bob     1/2/19 15:00    1/2/2019 16:00          
joe     1/2/19 17:30    1/2/19 18:45            
joe     1/2/19 21:00    1/2/19 21:15            
joe     1/2/19 21:00    1/2/19 22:00            
joe     1/2/19 15:00    1/2/2019 16:00

我的目标是输出工人的总工作时间。所提供的公式可提供整个文件的总数,而无需工作人员对其进行细分。

1 个答案:

答案 0 :(得分:1)

您将需要MAXIFS和MINIFS,这意味着您需要Office 365 Excel:

=SUMPRODUCT(--(COUNTIFS(A:A,"bob",B:B,"<=" & MINIFS(B:B,A:A,"bob") + ROW($XFD$1:INDEX($XFD:$XFD,ROUND((MAXIFS(C:C,A:A,"bob")-MINIFS(B:B,A:A,"bob"))*1440,0)))/1440-1/2880,C:C,">=" & MINIFS(B:B,A:A,"bob") + ROW($XFD$1:INDEX($XFD:$XFD,ROUND((MAXIFS(C:C,A:A,"bob")-MINIFS(B:B,A:A,"bob"))*1440,0)))/1440-1/2880)>0))/60

enter image description here