2016-12-08 2 views
1

私は6列のテーブルを持っています。 [ID、ステータス、開始時刻、終了時刻、時間、合計UP]VBA一定の基準までの時間の合計を再計算

Table Example

私は開始時刻と終了時刻の間に合計金額の時間をカウントしています。 今、私はこの時間の合計を計算しなければなりません。 問題は、「出荷」状態から「確認済」の状態が初めて表示されるまで、合計を特別な範囲でカウントする必要があることです。その後、次の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

IDが098で終わるので、E2:E6を合計しますか?そしてID569:E10:E12? – Andreas

+0

@ Andreas hi Andreas、いいえ、IDが098で終わる場合は、範囲E2:E5を、ID 569 E10:E11を合計したいとします。これは、ステータスが「チェック済み」である時間を除外することを意味します。 –

+0

「チェックされた」行が2つある場合は約200となりますか? –

答えて

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 
+0

ありがとうございました。それは完全に動作します。 –

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 
+0

私は質問がVBAであり、公式ではないと信じています。 – Andreas

+0

アドバイスありがとうございます。私はそれを試してみます。 –

+0

@Andreasあなたが正しいです。しかし、私はこの式をVBAコードに適用しようとします。たぶんこれはうまくいくでしょう。 –

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)))))) 
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を掛けます。

関連する問題