VBA重复总计几小时直到某个标准

我有一个6列的表。 [ID,状态,开始时间,结束时间,小时,总结]

表格示例

我已经计算了开始时间和结束时间之间的总金额。 现在我要计算一下这个小时的总结。 问题是,总计必须在特定范围内计数,从状态“运送”开始,直到状态“检查”仅出现在第一次。 然后重复以“发货”重新开始,直到“检查”下一个ID。

Sub SUMUP() Dim LastRow As Long LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow Cells(i, 6).Value = WorksheetFunction.SumIf(Range("A2:A" & LastRow), Range("A" & i), Range("E2:E" & LastRow)) Next End Sub 

我有这个代码来总结总小时数。 我怎样才能为我的情况写一个VBA代码?

预先感谢您的帮助。

试试这个:

 Sub SUMUP() Dim LastRow As Long LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow If Range("B" & i).Value = "Shipped" Then For j = i To LastRow If Range("B" & j).Value <> "Checked" Then Sum = Sum + Range("E" & j).Value Else Range("F" & j).Value = Sum Exit For End If Next j i = j Sum = 0 End If Next i End Sub 

或者一个数组

 =SUM(INDIRECT(("f"&MIN(IF((($A$1:$A$10="ID")*($B$1:$B$10="shipped")),ROW($A$1:$A$10)))&":"&"f"&MIN(IF((($A$1:$A$10=1)*($B$1:$B$10="checked")),ROW($A$1:$A$10)))))) 

如果订单状态按正确的顺序sorting,则可以使用此公式:

 =SUMIF(INDIRECT("A"&MATCH(A2,A:A,0)&":A"&ROW(A2)),A2,INDIRECT("E"&MATCH(A2,A:A,0)&":E"&ROW(A2))) 

这将是一个vba解决scheme

 Sub SUMUP() Dim LastRow As Long Dim hours As Integer Dim ID As Integer Dim checked As Boolean LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row ID = Cells(2, 1).Value For i = 2 To LastRow If ID = Cells(i, 1).Value Then If Cells(i, 2).Value <> "checked" And checked = False Then hours = Cells(i, 6).Value + hours Cells(i, 10).Value = hours ElseIf Cells(i, 2).Value = "checked" And checked = False Then checked = True hours = Cells(i, 6).Value + hours Cells(i, 10).Value = hours End If Else ID = Cells(i, 1).Value checked = False hours = 0 End If Next End Sub 

只是为了完整性,我相信这个非数组公式应该可以工作: –

 =IF(AND(B2="checked",COUNTIFS(A$1:A2,A2,B$1:B2,"checked")=1),C2-INDEX(C$2:C$10,MATCH(A2&"shipped",INDEX(A$2:A$12&B$2:B$12,0),0)),"") 

它只是从第一个选中的date时间中减去发货的date时间。

乘以24得到时间在几小时内。