2012-10-26 2 views
5

Bitte beachten Sie die Beispieldaten unter:Wie führt man einen Sumif mit leeren Zellen als Referenz durch?

Time  Date    Result 
00:21.6  10/1/2012 1:43  FALSE 
01:47.7  10/1/2012 2:13  FALSE 
00:56.7  10/1/2012 2:49  FALSE 
00:54.9  10/1/2012 3:43 
00:11.8  10/1/2012 3:43 
02:10.9  10/1/2012 3:46  FALSE 
01:05.4  10/1/2012 3:58  FALSE 
00:55.8  10/1/2012 4:53 
04:41.8  10/1/2012 4:52 
00:26.3  10/1/2012 4:58 
00:04.2  10/1/2012 4:58 
00:15.3  10/1/2012 4:59 
00:06.4  10/1/2012 4:57 
00:10.7  10/1/2012 4:56 
00:04.4  10/1/2012 4:56 
00:04.2  10/1/2012 4:57 
00:29.2  10/1/2012 4:57 
00:34.5  10/1/2012 4:56 
01:22.4  10/1/2012 4:55 
00:08.1  10/1/2012 4:55  FALSE 
03:20.9  10/1/2012 4:51  FALSE 
00:56.3  10/1/2012 5:42  FALSE 
02:23.1  10/1/2012 5:51  
01:20.6  10/1/2012 5:48 
00:09.8  10/1/2012 5:49  FALSE 
01:40.0  10/1/2012 7:47  FALSE 
01:13.4  10/1/2012 8:11  FALSE 
00:41.6  10/1/2012 9:49  FALSE 
01:08.1  10/1/2012 11:56  FALSE 

ich eine bestimmte Art von Berechnung durchführen müssen. Wenn es im Ergebnis keine leere Zelle gibt, brauche ich die Daten in der Zeitzelle neben dem Ergebnis. Wenn in der Ergebnisspalte jedoch eine leere Zelle vorhanden ist, muss in den Zeilen, die die leere Zelle und die erste Zelle enthalten, die FALSE enthält, eine Summe der Zeit neben der leeren Zelle angegeben werden.

Bitte beachten Sie die Beispielausgabe unter:

00:21.6  10/1/2012 1:43  FALSE  00:21.6 
01:47.7  10/1/2012 2:13  FALSE  01:47.7 
00:56.7  10/1/2012 2:49  FALSE  00:56.7 
00:54.9  10/1/2012 3:43  
00:11.8  10/1/2012 3:43  
02:10.9  10/1/2012 3:46  FALSE  03:17.6(i.e., 00:54.9+00:11.8+02:10.9) 
01:05.4  10/1/2012 3:58  FALSE  01:05.4 
00:55.8  10/1/2012 4:53  
04:41.8  10/1/2012 4:52  
00:26.3  10/1/2012 4:58  
00:04.2  10/1/2012 4:58  
00:15.3  10/1/2012 4:59  
00:06.4  10/1/2012 4:57  
00:10.7  10/1/2012 4:56  
00:04.4  10/1/2012 4:56  
00:04.2  10/1/2012 4:57  
00:29.2  10/1/2012 4:57  
00:34.5  10/1/2012 4:56  
01:22.4  10/1/2012 4:55  
00:08.1  10/1/2012 4:55  FALSE  09:23.3(i.e., 00:55.8+04:41.8+00:26.3+00:04.2+00:15.3+00:06.4+00:10.7+00:04.4+00:04.2+00:29.2+00:34.5+01:22.4+00:08.1) 
03:20.9  10/1/2012 4:51  FALSE  03:20.9 
00:56.3  10/1/2012 5:42  FALSE  00:56.3 
02:23.1  10/1/2012 5:51  
01:20.6  10/1/2012 5:48  
00:09.8  10/1/2012 5:49  FALSE  03:53.5(i.e., 02:23.1+01:20.6+00:09.8) 
01:40.0  10/1/2012 7:47  FALSE  01:40.0 
01:13.4  10/1/2012 8:11  FALSE  01:13.4 
00:41.6  10/1/2012 9:49  FALSE  00:41.6 
01:08.1  10/1/2012 11:56  FALSE  01:08.1 

Wenn es möglich ist, mit irgendwelchen Formeln oder Visual Basic-Editor bitte mich wissen lassen. Ich mache das jetzt manuell. Ich muss ungefähr 10000-15000 Reihen pro Tag handhaben. Wenn Sie mir helfen, könnte ich viele Stunden sparen und damit etwas Neues lernen.

+4

Ich denke nicht, dass die Verwendung von Formeln alleine möglich wäre, oder zumindest wäre es viel mehr Arbeit als die Verwendung von VBA, wenn Sie das bereits wissen. Dies ist nur eine Frage der Variablen, die die laufende Summe halten und jedes Mal, wenn Sie auf "FALSE" stoßen, zurücksetzen. – ApplePie

+0

@ AlexandreP.Levasseur +1, und aus irgendeinem Grund kann ich nicht aufhören zu versuchen, es herauszufinden, mit einer einzigen Formel :) – RocketDonkey

+0

@ AlexandreP.Levasseur Danke für die Einsicht. Kannst du mir irgendetwas vorschlagen? – Dinesh

Antwort

5

Sie können dies versuchen, wenn Sie VBA lieber mit:

Sub SmartRunningTotals() 
    Dim rng As Range 
    Dim cell As Range 
    Dim lastRow As Long 
    Dim totalTime As Double 

    ' I'm assuming your time column is in column A 
    lastRow = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row 

    Set rng = Range("A2:A" & lastRow) 

    For Each cell In rng 
     totalTime = totalTime + cell.Value 
     If cell.Offset(, 2).Value <> "" Then 
      cell.Offset(, 3).Value = totalTime 
      ' reset total after we write it to column D 
      totalTime = 0 
     End If 
    Next 

End Sub 
+0

Vielen Dank. Es klappt. Kannst du diesen Code ändern, so dass die Zeit in Spalte H ist, das Datum in I ist und das Ergebnis in M ​​ist? Ich brauche die Summe in Spalte N. Vielen Dank im Voraus. – Dinesh

+1

@Dinesh, ändern Sie einfach die "A" zu "H" 'im Code für Ihre Zeitspalte, dann ändern Sie die Zahl in der' cell.offset', um die Spalten, die Sie verwenden möchten, zu verweisen. Zum Beispiel bedeutet 'cell.offset (, 5) '5 Spalten rechts von Ihrer Time-Spalte. Und akzeptiere meine Antwort, indem du auf das Kontrollkästchen klickst. –

2

Ziemlich einfach in zwei Spalten. Berechnen Sie eine laufende Summe und setzen Sie sie zurück, wenn die darüber liegende Zelle nicht leer ist.

z.

(Time = Spalte H, Datum = Spalte I, Ergebnis = Spalte J)

Column N 
    =IF(J1="",H2+N1,H2) 
    =IF(J2="",H3+N2,H3) 
    =IF(J3="",H4+N3,H4) 
    =IF(J4="",H5+N4,H5) 
    =IF(J5="",H6+N5,H6) 

Column O 

    =IF(J2="","",O2) 
    =IF(J3="","",O3) 
    =IF(J4="","",O4) 
    =IF(J5="","",O5) 
    =IF(J6="","",O6) 

kopieren diese Formeln auf unten

+0

Es scheint nicht zu funktionieren. Könntest du erklären? – Dinesh

+0

Die Spaltennamen geändert, um zu passen, was Sie beschreiben – Nat

0

ich Ihre vorhandenen Bereich gehe davon beginnt in Zelle A1 (dh das Wort "Time" existiert in Zelle A1). Ich gehe auch davon aus, dass in Spalte C die zwei möglichen Werte der logische Wert FALSE (nicht die Textzeichenfolge "FALSE") oder leer (keine Zeichenfolge mit 1 oder mehr Leerzeichen) sind.

In Zelle D1 geben Sie die Formel =IF(AND(C2=FALSE,C1=""),D1+1,1)

in der Zelle E1 geben Sie die Formel =IF(C2="","",SUM(OFFSET(A2,-(D2-1),0,D2,1)))

das Zahlenformat in Zelle E1 Set zu "mm:ss.0"

Kopieren D1 und E1 den ganzen Weg hinunter Ihre Angebot. Verstecken Sie Spalte D falls gewünscht.

+0

lol, @ Nat Antwort ist einfacher, gehen Sie mit diesem – ExactaBox

+0

Es scheint, dass diese Antwort nicht für mich funktioniert. Leiter des Catering-Codes funktioniert gut.Ich brauche einige Modifikationen, die ich machen muss. – Dinesh

1

Unter der Annahme, Daten beginnt in Zeile 2 mit Header in Zeile 1, dann können Sie diese Formel in D2 nach unten kopiert

=IF(C2<>"",SUM(A$2:A2)-SUM(D$1:D1),"")

Verwandte Themen