基于条件的时间计数

Time count based on condition

我一直在想办法,请问有没有人能指点一下。

我有一张工作表,其中列出了当天执行的活动(W 列),因此我每天都有一份报告。每个 activity 都有一个由下拉菜单(U 列)中列出的字母定义的类型,例如:'R' for 'Reporting', 'M' 对于 'Meeting' 等,以及以小时为单位的持续时间 (HH:mm)(S 列)。

我希望我的工作表做的是根据活动的类型对所有活动的持续时间求和,并将结果存储在不同的单元格中。在所附的图像示例中,Meeting 必须有 3:30 h,Reporting 必须有 4:30 和 2 h for 绘图.

下面的 SumIf 代码所做的是对所有小时数求和,但它不计算持续时间,一旦持续时间是下一行中的时间与条件所在行的时间之间的差值论据是。

Sub test_count_hours()

Range("E35").Value = WorksheetFunction.SumIf(Range("U8:U37"), "R", Range("S8:S37"))

End Sub

所以我的努力​​是让代码计算事件的持续时间。

填写的工作表示例

如何将 activity 类型存储在数组中?您可以遍历每个 activity,然后遍历每一行以检查 activity 类型,如果匹配

,则添加该行与下一行之间的时间
Sub sumHours()
Dim activityList As Variant
Dim activity As Variant
Dim rowCount As Integer
Dim countHours As Date

activityList = Array("M", "R", "Dv")

Range("U5").Select
Range(Selection, Selection.End(xlDown)).Select
rowCount = Selection.Rows.Count

For Each activity In activityList
countHours = 0
    For i = 5 To rowCount + 5
        If Range("U" & i) = activity Then
            countHours = countHours + Range("S" & i + 1) - Range("S" & i)
        End If
    Next i

    Select Case activity
        Case Is = "M"
        Range("E35") = countHours

        Case Is = "R"
        Range("E36") = countHours

        Case Is = "Dv"
        Range("E37") = countHours
    End Select
Next activity
End Sub

(确保将保存时间值的单元格的格式设置为 "Time" 数据类型。