【发布时间】:2017-11-29 00:12:29
【问题描述】:
希望这是一个简单的答案。
我真的没有选择我使用什么语言,这就是我在 Excel 中使用 VBA 执行此操作的原因。
我基本上是在计算一个月内的总停机时间。当然,我需要将少量分钟加在一起才能得出总时间超过 24 小时。
这是场景:
本月服务器 A 停机 3 小时 52 分钟。
本月服务器 B 宕机了 15 小时 25 分钟。
服务器 B 在关键期间有 7 小时 23 分钟的停机时间,因此将其乘以 3 等于非关键停机时间。
服务器 A 有:3 小时 52 分钟 x1
服务器 B 有:8 小时 2 分钟 x1
服务器 B 有:7 小时 21 分钟 x3
所有停机时间和恢复时间都以 Excel 可识别的时间格式手动列出在工作表中,例如:
活动 1 : 19/11/2017 5:00 : 19/11/2017 14:12
活动 2 : 13/11/2017 6:00 : 13/11/2017 6:40
活动 3 : 13/11/2017 7:57 : 13/11/2017 9:01
活动 4 : 17/11/2017 6:15 : 18/11/2017 8:10
周末不计算
只计算早上 6 点到下午 6 点之间的分钟数
在特定时间段内优先级增加的分钟数:
06:00-07:00, 07:00-09:00, 09:00-10:00, 10:00-14:00
将高优先级分钟数相乘以使高峰时间使用量与较低标准时间使用量相等
我正在努力寻找一种将时间相加来计算小时数的方法,excel 尝试给出相对于 01/01/1900 或某个“真实”日期的答案。
我走的是相反的路,我有真正的约会,我需要处理他们之间的时间。是否有以小时为单位的数据格式:分钟?
我认为这很明显,但我会明确说明以防万一,开始时间和结束时间不一定在同一天。它们可以是任何时间、任何关系,有时开始时间会在结束时间之后,这取决于如何报告故障。显然,在这种情况下,这算作 0 分钟。
我目前解决这个问题的方法是:
- 增加启动时间,直到变为有效充电时间
- 计算直到发生变化(例如结束时间或更高优先级的时间段,或开始时间 = 结束时间)的分钟数
- 将计算出的分钟数加到总数中
- 将开始时间增加计算的分钟数
-
从新的“开始时间”重新开始循环并循环,直到开始时间和结束时间之间没有剩余分钟数
startof: 'move to start of next chargeable day, if not on a chargeable day 'eg weekends, public holidays, easy function to write Do While testForChargeable() = False opnDate = DateAdd("d", 1, opnDate) opnTime = "06:00" Loop 'check if open time is past the end of chargeable time, 18:00 If (opnTime >= endofdayTime) Then 'move to start of next chargeable day opnDate = DateAdd("d", 1, opnDate) opnTime = "06:00" End If 'check if open time is after close time and fault is excluded If (opnDate >= bisDate) And (opnTime >= bisTime) Then GoTo last End If 'check if close time is on same day as start time If DateDiff("d", opnDate, bisDate) = 0 Then 'if it is, add minutes between opntime and bistime chargeTime = chargeTime + calculateChargeTime(opnTime, bisTime) 'calculation ends, loop naturally terminates Else 'if not, add remaining mintes of day to chargeable time chargeTime = chargeTime + calculateChargeTime(opnTime, endofdayTime) 'move to start of next day opnDate = DateAdd("d", 1, opnDate) opnTime = "06:00" GoTo startof End If last:
干杯
【问题讨论】:
-
这里没有问题
-
简单(或愚蠢?)的答案显然是“有时”(或者那是“有时”?)
-
我在添加标签时按回车,在我写之前不小心提交了问题
-
将 NumberFormat 更改为
[hh]:mm,这会强制 Sum 以小时为最大单位。 -
Patrick 听起来不错,但我看不到如何在 VBA 中执行此操作,就像使用单元格属性一样