2017-10-11 96 views
0

我一直在努力弄清这一点,看看有没有人可以给我一些方向,请。根据条件计算的时间

我有一张工作表,我把这些活动通过一天(列W)进行,所以我每天都有一份报告。每个活动都有一个由下拉菜单(列U)中列出的字母定义的类型,例如:'R'为'报告','M'为'会议'等,持续时间以小时为单位HH:mm)(S列)。

我希望我的工作表做的事情是基于它们的类型对活动的所有持续时间进行求和并将结果存储在不同的单元格中。在附图所示的例子中,我必须有3点半的时间才能参加会议 4:30对于举报和2小时

以下SumIf代码所做的是总结所有小时数,但它不计算持续时间,一旦持续时间是下一行中的时间与条件参数所在的行之间的时间差是。

Sub test_count_hours() 

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

End Sub 

所以我的斗争是为了使代码acounting对事件的持续时间。

的实例填充工作表

enter image description here

+1

如果您需要关于代码的帮助,请将其包含在您的问题中 – braX

+0

您需要'SumIf',但请提及@braX,发布您的代码或您尝试过的内容 – Moacir

+0

你是对的@Moacir,我编辑了我的问题,我只是认为它太简单了,甚至不包括它,但我错了。 –

回答

0

怎么样在阵列中存储你的活动类型?你可以通过每个活动循环,然后通过各行检查活动类型,并称和下一行之间的时间,如果它是一个匹配循环

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 

(确保将举行timevalues的单元格的格式与“时间”数据类型相关联

+0

看起来您的活动从第5行开始。如果不是您会改变初始单元格:) – Leroy

+0

谢谢@Leroy,这正是我需要的!感谢所有其他的,当然。 –