2017-10-11 164 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,這正是我需要的!感謝所有其他的,當然。 –