2012-10-26 25 views
5

Si prega di vedere i dati di esempio qui sotto:Come eseguire un risultato utilizzando celle vuote come riferimento?

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 

ho bisogno di eseguire un certo tipo di calcolo. Se non ci sono celle vuote nel risultato, ho bisogno dei dati nella cella del tempo accanto al risultato. Ma se c'è una cella vuota nella colonna del risultato, ho bisogno di eseguire una somma del tempo nelle righe che contengono la cella vuota e la prima cella contenente FALSE accanto alla cella vuota.

Si prega di vedere l'output seguente esempio:

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 

Se è possibile con qualsiasi formula o utilizzando Visual Basic Editor per favore fatemelo sapere. Lo sto facendo manualmente in questo momento. Devo gestire circa 10000-15000 file al giorno. Se mi aiuti, potrei risparmiare un sacco di ore e usarlo per imparare qualcosa di nuovo.

+4

Non credo che usare le formule da solo sarebbe possibile o almeno sarebbe molto più lavoro che usare VBA se lo sai già. Questo è solo il fatto che una variabile tiene il totale parziale e lo ripristina ogni volta che si incontra "FALSE". – ApplePie

+0

@ AlexandreP.Levasseur +1, eppure per qualche motivo non riesco a smettere di cercare di capirlo con una sola formula :) – RocketDonkey

+0

@ AlexandreP.Levasseur Grazie per l'intuizione. Mi puoi suggerire qualcosa? – Dinesh

risposta

5

Si può provare questo se si preferisce usare 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

Grazie mille. Funziona. È possibile modificare questo codice, in modo che il tempo sia nella colonna H, la data è in I e il risultato è in M? Ho bisogno che il totale sia nella colonna N. Grazie mille in anticipo. – Dinesh

+1

@Dinesh, basta cambiare il '' A ''a' "H" 'nel codice per la colonna del tempo, quindi modificare il numero nel' cell.offset' per fare riferimento alle colonne che si desidera utilizzare. Ad esempio, 'cell.offset (, 5)' indica 5 colonne a destra della colonna Time. E per favore accetta la mia risposta cliccando sulla casella di controllo. –

2

Abbastanza facile in due colonne. Calcola un totale parziale e ripristina se la cella sopra non è vuota.

E.g.

(Tempo = Colonna H, Data = Colonna I, Risultato = Colonna 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) 

Copia quelle formule in giù

+0

Non sembra funzionare. Potresti spiegare? – Dinesh

+0

Modificato il nome della colonna per adattarlo a quello che viene descritto – Nat

0

sto assumendo la vostra gamma esistente inizia nella cella A1 (ovvero la parola "Time" esiste nella cella A1). Sto anche assumendo che nella colonna C i due valori possibili siano il valore logico FALSE (non la stringa di testo "FALSE") o vuota (non una stringa di 1 o più spazi).

nella cella D1, digitare la formula =IF(AND(C2=FALSE,C1=""),D1+1,1)

Nella cella E1, digitare la formula =IF(C2="","",SUM(OFFSET(A2,-(D2-1),0,D2,1)))

Impostare il formato numerico nella cella E1 per "mm:ss.0"

Copia D1 ed E1 fino in fondo il tuo gamma. Nascondi la colonna D se lo desideri.

+0

lol, la risposta di @ Nat è più semplice, andare con quella – ExactaBox

+0

Sembra che questa risposta non funzioni per me. Il codice di capo del catering funziona bene.Ho bisogno di alcune modifiche da fare al suo interno. – Dinesh

1

Supponendo dati inizia alla riga 2 con intestazioni nella riga 1 quindi è possibile utilizzare questa formula in D2 copiato giù

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

Problemi correlati