Excel中重叠date时间的总和

我需要确定在Excel中我的应用程序的总停机时间 – 我只收到他们上下的时间警报。 我的目标是通知我的客户停机时间总计(不包括时间上的重叠),表示停机。 例如,申请A从1:30到2:30下降,申请B从2:00到2:30下降,那么总的停机时间将是1小时而不是1.5小时。

有人可以帮助,因为我需要一个Excel的公式来做到这一点? 我原始的正常运行时间/停机时间日志如下。 谢谢!

Outage Start Outage End Application A 2/7/2014 5:32 2/7/2014 5:37 Application A 2/7/2014 5:22 2/7/2014 5:27 Application A 2/7/2014 5:12 2/7/2014 5:17 Application A 2/7/2014 4:57 2/7/2014 5:07 Application A 2/7/2014 4:07 2/7/2014 4:52 Application B 2/7/2014 7:48 2/7/2014 7:49 Application B 2/7/2014 7:05 2/7/2014 7:06 Application B 2/7/2014 5:31 2/7/2014 5:34 Application B 2/7/2014 5:29 2/7/2014 5:30 Application B 2/7/2014 5:22 2/7/2014 5:23 Application B 2/7/2014 5:09 2/7/2014 5:21 Application B 2/7/2014 4:54 2/7/2014 5:05 Application B 2/7/2014 4:28 2/7/2014 4:49 Application B 2/7/2014 4:06 2/7/2014 4:23 

我不会在这里提出任何公式,因为重叠时间的问题总是让我感到困惑的是写一个公式。 在这样的事情中,我更愿意在VBA中一起编码。 但是,由于我使用了基于时间的数据,所以我可以给你一些提示。

这个看起来很困难的原因是因为你正在看对它。 别。 这是理解它的关键。 把它看作一个持续不断的时间(禅点),并相应地标记每个活动的开始和结束。

简而言之,您要做的事情很简单:find两个应用程序中任何一个的最低停电开始时间,查找下一个最低停电开始时间之前的两个应用程序中的任何一个的最新停电结束时间这两个应用程序中的任何一个应用程序中的以前的中断结束时间,并将这两个应用程序的所有开始和结束时间放在一起。 呼。

上面可能看起来很复杂,但事实并非如此。 例如,你所拥有的最早的O.Start在B的4:06 。与A相比,B更早一分钟。 然而,A有一个更高的O.End 4:52 。 不要把它看作重叠,而应该忽略它们重叠的想法,而不是让自己混淆,只是弄清楚两者之间的区别。 这是因为您要对他们的logical OR -kindtypes的中断进行计费。 (这意味着如果A或B倒下,票据将一直运行直到两者都出现)。

我看到的方式很简单:把所有的时间都整合在一个长列表中,每个列表都标记为开始和结束。 然后我们寻找一对开始和结束。 如果一开始,你立即find一个结局,这是一对。 如果开始之后没有开始,请计算您有多less个连续的开始,并find许多结束。 这些结果中的最后一个将是该区块的最终结局。

听起来很混乱? 有点,但不是真的。 看到我的截图如下:

这是我的分类数据,标记正确。

在这里输入图像说明

然后我将这两个列表合并成一个,然后逐级sorting。

在这里输入图像说明

这是有趣的部分。 将块中的第一个开始标记为红色,然后find下一个结束。 如果在第一个开始和第一个结束之间有一个开始,“加一个”到最后find。 重复这个循环,直到你没有更多的目的,find并标记为绿色。

在这里输入图像说明

现在,下一个开始是新块的开始。 重复上述步骤3中的操作,直到完成列表。

在这里输入图像说明

删除未标记的单元格,并添加差异。 为此,我只是在屏幕截图中使用了这个公式,然后拖了下来。 总结在底部。

在这里输入图像说明

正如我所说,我无法为您提供公式,但无论是通过公式或VBA,这是我将采用的逻辑。

让我们知道这是否有帮助。

这是一个更好的答案,将更准确地计算您的停电时间。

首先,压缩你的数据,使所有的行都是连续的。

在您的值旁边创build以下公式(假设您的数据以A1开头):

 =SUMPRODUCT(--(B3>$B$2:$B$15),--(C3<$C$2:$C$15))=0 

这将确定是否有任何行是完全重叠的。 在范围上应用一个filter,并过滤掉“FALSE”值,然后按升序(从旧到新)开始进行sorting。

然后在下一栏中使用:

 =IF(C4>B5,B4,0) 

这将确定时间是否是停电区域中最早的开始时间。

 =COUNTIF($E$4:E4,"<>0") 

将依次标记哪个块可用来查找最大中断结束时间。

 {=MAX(IF(F4=$F$4:$F$15,$C$4:$C$15,""))} 

在下一列中input上面的公式作为数组公式,不包含大括号(input公式并按CTRL + SHIFT + ENTER键而不是ENTER键)

最后,在下一列中,使用以下公式来查找总停机时间。

 =SUMPRODUCT(G4:G15-E4:E15,--(E4:E15>0))