我有一个包含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代码?
提前感谢您的帮助。
答案 0 :(得分:1)
试试这个:
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
答案 1 :(得分:0)
如果订单状态按正确的顺序排序,则可以使用此公式:
=SUMIF(INDIRECT("A"&MATCH(A2,A:A,0)&":A"&ROW(A2)),A2,INDIRECT("E"&MATCH(A2,A:A,0)&":E"&ROW(A2)))
这将是一个vba解决方案
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
答案 2 :(得分:0)
或数组
=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))))))
答案 3 :(得分:0)
为了完整起见,我相信这个非数组公式应该有效: -
=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)),"")
它只是从第一个检查的日期时间中减去发货的日期时间。
乘以24以获得数小时的时间。