Excel中重叠日期时间的总和

时间:2014-02-07 15:18:16

标签: excel datetime excel-formula

我需要确定我的应用程序在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

2 个答案:

答案 0 :(得分:2)

我不会在这里提出任何公式,因为重叠时间的问题总是让我觉得混淆写一个公式。在这样的事情上,我更愿意在VBA中编写一些东西。但是,由于我使用基于时间的数据做了很多工作,我可以给你一些提示。

这看起来很难的原因是因为你正在观看它们。别。这是理解它的关键。将其视为一个连续的时间流(禅谈话的点),并相应地标记活动的每个开始和结束。

简而言之,您尝试做的很简单:找到两个应用程序中任意一个的最低停机开始时间,在 的两个应用程序中寻找最新的停机结束时间在 之前,下一个最低中断开始时间大于两个应用程序中任何一个中的上一个中断结束时间,并将这两个应用程序的所有开始和结束放在两者之间。的 呼。

以上看起来似乎很复杂,但事实并非如此。例如,您拥有的最早O.Start位于B中的4:06。与A相比,B早一分钟。但是,A的O.End 4:52较高logical OR。不要将它视为重叠,而忽略了它们重叠的想法,不要混淆自己,只是得到两者之间的差异。这是因为您要为{{1}}类型的中断计费。 (意思是如果A或B下降,则账单一直运行直到两者都出现)。

我看待它的方式很简单:在一个长列表中合并所有时间,每个列表都正确标记为开始和结束。然后我们寻找一对开始和结束。如果在开始之后,你立即找到了一个结束,那就是一对。如果开始后没有开始,则计算您有多少次连续开始并找到许多结束。最后一个结束将是该区块的最终结束。

听起来很混乱?有点,但不是真的。请参阅下面的屏幕截图:

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

enter image description here

然后我将两个列表合并为一个,并按升序排序。

enter image description here

这是有趣的部分。将块中的第一个开始标记为红色,然后找到下一个结束点。如果在第一个开始和第一个结束之间有一个开头,则在末尾“添加一个”进行查找。重复此循环,直到找不到更多的结尾并将其标记为绿色。

enter image description here

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

enter image description here

删除未标记的单元格,然后添加差异。为此,我只是使用截图中的公式并向下拖动。总和位于底部。

enter image description here

正如我所说,我不能为你提供公式,无论是通过公式还是通过VBA,这都是我将采用的逻辑。

如果有帮助,请告诉我们。

答案 1 :(得分:1)

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

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

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

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

这将确定是否有任何行完全重叠。在范围上应用过滤器并过滤掉“FALSE”值,然后按停止开始按升序排序(从最旧到最新)。

然后在下一栏中使用:

=IF(C4>B5,B4,0)

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

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

将按顺序标记哪个块可用于查找最大停机结束时间。

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

在下一列中输入上面的公式作为数组公式,不带花括号(输入公式并按CTRL + SHIFT + ENTER而不是ENTER)

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

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