2012-10-26 9 views
5

proszę zobaczyć przykładowe dane poniżej:Jak wykonać sumif używając pustych komórek jako odniesienia?

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 

muszę wykonać pewnego rodzaju obliczeń. Jeśli w wyniku nie ma pustej komórki, potrzebuję danych w komórce czasu obok wyniku. Ale jeśli w kolumnie wyników jest pusta komórka, muszę wykonać sumę czasu w wierszach, które zawierają pustą komórkę i pierwszą komórkę zawierającą FALSE obok pustej komórki.

proszę zobaczyć Przykâadowa poniżej:

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 

Jeśli jest to możliwe za pomocą dowolnych wzorów lub przy użyciu Edytora Visual Basic proszę dać mi znać. Robię to ręcznie teraz. Muszę obsłużyć około 10000-15000 wierszy dziennie. Jeśli mi pomożesz, będę mógł zaoszczędzić wiele godzin i użyć go, aby nauczyć się czegoś nowego.

+4

Nie sądzę, że używanie formuł w pojedynkę byłoby możliwe, a przynajmniej byłoby to znacznie więcej pracy niż przy użyciu VBA, jeśli już to wiesz. Jest to tylko kwestia posiadania zmiennej utrzymującej sumę bieżącą i resetowania jej za każdym razem, gdy napotkasz "FALSE". – ApplePie

+0

@ AlexandreP.Levasseur +1, a jednak z jakiegoś powodu nie mogę przestać próbować tego rozgryźć za pomocą jednej formuły :) – RocketDonkey

+0

@ AlexandreP.Levasseur Dzięki za wgląd. Czy możesz mi coś zasugerować? – Dinesh

Odpowiedz

5

Można spróbować to jeśli wolisz przy użyciu VBA:

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

Wielkie dzięki. To działa. Czy możesz zmienić ten kod, aby Czas był w kolumnie H, data jest w I, a Wynik w M? Potrzebuję całkowitej liczby w kolumnie N. Dziękuję bardzo z góry. – Dinesh

+1

@ Dinesh, po prostu zmień '' A "' na '" H "' w kodzie dla swojej kolumny czasu, a następnie zmodyfikuj liczbę w 'cell.offset', aby odnieść się do kolumn, których chcesz użyć. Na przykład 'cell.offset (, 5)' oznacza 5 kolumn po prawej stronie kolumny Czas. I proszę przyjąć moją odpowiedź, klikając pole wyboru. –

2

Całkiem łatwo w dwóch kolumnach. Oblicz łączną sumę i zresetuj, jeśli powyższa komórka nie jest pusta.

E.g.

(czas = Kolumna H, Date = Kolumna I Kolumna Wynik = 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) 

skopiować te wzory na dół

+0

To nie działa. Czy możesz wytłumaczyć? – Dinesh

+0

Zmieniono nazwy kolumn tak, aby pasowały do ​​tego, co opisujesz: – Nat

0

Jestem zakładając istniejący zakres zaczyna się w komórce A1 (tj. Słowo "Time" istnieje w komórce A1). Zakładam również, że w kolumnie C dwiema możliwymi wartościami są: wartość logiczna FALSE (nie ciąg tekstowy "FALSE") lub puste (nie ciąg 1 lub więcej spacji).

W D1 komórkowy, wprowadź formułę =IF(AND(C2=FALSE,C1=""),D1+1,1)

W komórce E1, wprowadź formułę =IF(C2="","",SUM(OFFSET(A2,-(D2-1),0,D2,1)))

Ustaw format numeru w komórce E1 do "mm:ss.0"

Copy D1 i E1 w dół listy zasięg. Ukryj kolumnę D, jeśli chcesz.

+0

lol, odpowiedź @ Nat jest prostsza, idź z tym – ExactaBox

+0

Wygląda na to, że ta odpowiedź nie działa dla mnie. Szef kodu Catering działa dobrze.Potrzebuję w nim pewnych modyfikacji. – Dinesh

1

Zakładając danych rozpoczyna się w rzędzie 2 z nagłówków w wierszu 1, można korzystać z tej formuły w D2 kopiowane

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

Powiązane problemy