Excel宏VBA:将总计可以超过24小时的会议记录和小时数相加

时间:2017-11-29 00:12:29

标签: vba date time

希望这是一个愚蠢的问题,答案很简单。

我真的没有选择使用哪种语言,这就是我在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分钟。

我目前解决此问题的方法是:

  1. 将开始时间增加到有效充电时间
  2. 计算分钟,直到有一天或更高优先级时段或开始时间=结束时间等变化为止
  3. 将计算的分钟数添加到总数
  4. 按计算的分钟数增加开始时间
  5. 从新的'开始时间'再次开始循环。并循环,直到开始时间和结束时间之间没有剩余分钟

    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:
    
  6. 干杯

0 个答案:

没有答案