如何在24小时内(不超过100%)计算(汇总)适当的百分比

时间:2019-10-30 09:44:30

标签: excel vba excel-formula excel-2013 array-formulas

主题听起来很简单,但我感兴趣的任务却并非如此!

因此,我得到了一组每天变化的测量数据,一天之内有更多实例!因此,如您在07.02.2019上所看到的,您获得了5个实例,它们正在以不同的时差变化(系统变化)。嗯,这就是要点,我需要在24小时内以百分比表示!不像您在本示例中可以看到100%以上的废话。

数据本身正在不断记录数据,并且系统自动更改。有时您每天可以有1-2个实例,有时是5倍以上。.

我使用=mod进行了时差(d2-d1,1),并使用=sumifs进行了一些计算,以给我每个系统一天的总和,但这是错误的,因为它还占用了与前一天并进行总结。...

有什么办法可以限制在24小时内吗?不计算24小时内的时差吗?

希望您能引起我的关注。.这只是完整图片的一小部分,还有更多的事件发生在我所占的比例超过100%的情况下。...

我的意思是有一种== MIN(1;I2)的表达方式,但是我只限于100%。.不知道这是否正确。

Data

Chart

Calculate

enter image description here

1 个答案:

答案 0 :(得分:1)

好的。这可能无法完全满足您的要求,但我希望这能帮助您到达那里...

您有3个主要的静态数据列:

  • 日期
  • 开始时间
  • 系统

我首先将“日期”和“开始时间”合并为一个“开始日期时间”列。

然后我使用MINIFS创建了一个“ Finish DateTime”列-这样,表的排序顺序将不会影响数据。

然后我在另一列中显示了完成时间或一天的结束时间,以先到者为准(MIN)。

然后我计算“总时差”-简单地是“完成日期时间”减去“开始日期时间”。

我再次这样做,但是这次是“午夜结束时间”。

我添加的最后一个帮助者专栏是显示午夜中断后经过了多少时间。这就是“总时间差”减去“午夜截止时间差”。

到目前为止,一切都很简单。这是一张有望使我的布局清晰的图像。 (您可以根据需要移动或隐藏列)。

enter image description here

这些帮助器列的公式非常简单,因此我将不对其进行解释,但将在下面提供它们:

开始日期时间

Start Datetime:
     =$A3+$B3

Finish Datetime:
     =IF(MINIFS($D$3:$D$12,$D$3:$D$12,">"&$D3)=0,"",MINIFS($D$3:$D$12,$D$3:$D$12,">"&$D3))

Finish Time (Midnight Cut Off):
     =IF($E3="","",MIN($A3+1,$E3))

Total Time Diff:
     =IF($E3="","",$E3-$D3)

Time diff (Until Midnight):
     =IF($E3="","",$F3-$D3)

Remaining Time (After Midnight):
     =IF($E3="","",$G3-$H3)

-------------------------------------------- --------------------
编辑:澄清评论。
----------------------------------------------- -----------------

“完成日期时间”公式实际上只是一个MINIFS函数。

它看起来更复杂,因为我将其包装在IF语句中,以处理没有结束时间(即我们目前处于该时间段)的情况。

在这种情况下,为避免返回“ 01/01/1900”(0),它将返回一个空字符串。

主要的MINIFS功能:

MINIFS($D$3:$D$12,$D$3:$D$12,">"&$D3)

通过选择大于“开始日期时间”的最小“开始日期时间”来工作。 (即下次开始的时间。)

如果您的数据始终按升序的“开始日期时间”排序,则可以通过简单地=$D4(即选择下面一行的开始日期时间)来完成相同的操作。但是,如果您随后对数据进行不同的排序,则会完全破坏您的结果。

我总是喜欢将表设为“安全排序”。

-------------------------------------------- --------------------
结束编辑
----------------------------------------------- -----------------

此外,如您所见,我在末尾添加了一个完全独立的表。

这在左侧列出了所有日期(甚至是在主数据中跳过的日期)的列表。 以及所有水平运行的系统的列表(每个系统两列以显示时间和百分比)。

百分比只是该特定系统的时间除以该特定日期的总时间。

困难的部分是计算时间。这样做的公式如下:

=IF($K3=MAX($A$3:$A$12),"",
    MIN( "24:00:00",
        SUMIFS($H$3:$H$12, $A$3:$A$12, $K3, $C$3:$C$12, L$1)
        +
        MAX(0,
            SUMIFS($I$3:$I$12, $D$3:$D$12, MAXIFS($D$3:$D$12, $A$3:$A$12, "<"&$K3, $C$3:$C$12, L$1), $C$3:$C$12, L$1)
            -
            (   $K3
                -IF(MAXIFS($A$3:$A$12,$A$3:$A$12,"<"&$K3)=0, $K3, MAXIFS($A$3:$A$12,$A$3:$A$12,"<"&$K3)+1)
            )
        )
    )
)

第一部分,检查相关日期是否有完成时间,如果没有,则返回空白。

MIN("24:00:00", ...将时间限制为24小时。即如果跳过了多天,则忽略多于一天(在该特定日期)。

其余的公式基本上是:

<Total time diff up until midnight for the particular date & system>
+
<The time remaining after midnight from the day before>
-
<The number of days skipped>

如有任何疑问,请告诉我。