54

Io uso la seguente funzionePrendi l'ultima cella non vuota in una colonna in Google Fogli

=DAYS360(A2, A35) 

per calcolare la differenza tra due date nella mia rubrica. Tuttavia, la colonna è in continua espansione e al momento devo modificare manualmente "A35" mentre aggiorno il mio foglio di lavoro.

C'è un modo (in Fogli Google) per trovare l'ultima cella non vuota in questa colonna e quindi impostare dinamicamente tale parametro nella funzione sopra?

+2

domanda simile: http://stackoverflow.com/questions/4169914/selecting-the-last-values-of-a-column/13356890 –

risposta

79

Ci può essere un modo più eloquente, ma questo è il modo in cui mi si avvicinò con:

La funzione per trovare l'ultima cella popolata in una colonna è:

=INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A))))) 

Quindi, se si combinano con la funzione corrente sarebbe simile a questa:

=DAYS360(A2,INDEX(FILTER(A:A ; NOT(ISBLANK(A:A))) ; ROWS(FILTER(A:A ; NOT(ISBLANK(A:A)))))) 
+0

Non sono molto preoccupato dell'eloquenza in questo caso finché funziona come un fascino (che fa) - grazie mille Sam! – MichaelS

+2

Ho finito per confrontarmi con la stringa vuota invece di usare ISBLANK, che tratta alcune celle vuote (ad esempio formule di ritorno vuoto come = "" come non-blank. Quindi: '= index (filter (A: A, A: A <> ""), righe (filtro (A: A, A: A <> ""))) ' – circlepi314

41

Per trovare l'ultima cella non vuota è possibile utilizzare INDEX e MATCH funzioni in questo modo:

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1))) 

Penso che questo sia un po 'più veloce e più facile.

+0

Questo è più semplice e l'ho provato. Funziona alla grande – Ciaran

+12

Il metodo sembra trovare solo l'ultima cella se il valore è un numero, il mio metodo troverà l'ultima riga se è anche di tipo stringa La domanda originale riguardava le date, quindi questo avrebbe funzionato, ma visto che l'articolo riceve ancora attenzione, vale la pena notare la differenza. Tutto dipende dalle tue esigenze.Se hai solo bisogno di un numero che consiglio in questo modo –

+2

Ecco un'altra variante http://stackoverflow.com/a/13871043/44620 –

2

Che dire di questa formula per ottenere l'ultimo valore:

=index(G:G;max((G:G<>"")*row(G:G))) 

E questa sarebbe una formula finale per il vostro compito originale:

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G)))) 

Supponiamo che la data iniziale è in G10.

23

Se A2: A contiene date contigue allora INDICE (A2: A, COUNT (A2: A)) restituirà l'ultima data. La formula finale è

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A))) 
+6

Personalmente penso esimo dovrebbe essere la risposta accettata Conciso e semplice. – SwampThingTom

+0

Questa è la risposta più precisa. Mentre la risposta di @Poul sopra funziona per questo caso, volevo trovare l'ultima cella effettiva con i dati effettivi e questo ottiene se i dati sono in ordine o meno. –

-1

Il modo un dilettante fa è "= CONCATENA (" A "COUNTUNIQUE (A1: A9999))", dove A1 è la prima cella della colonna, e A9999 è più in basso quella colonna di quanto mi aspetto di avere delle voci. Questo risultante A # può essere usato con la funzione INDIRETTO se necessario.

+0

Siamo spiacenti. Funziona solo se tutte le voci nella colonna sono univoche. –

+0

Mentre apprezzo il tuo contributo a StackOverflow, Conrad, la tua risposta ha alcuni problemi. Per prima cosa, non ha specificato che le date erano uniche, quindi dovresti usare count(), invece di countunique(). In secondo luogo, usando indiretto() e concatenato si duplica la funzionalità esistente di index(), come si può vedere nelle altre risposte. Terzo, invece di A1: A9999, perché non usare solo A1: A? –

10

Se la colonna è stata espansa solo con date aggiunte contigue come nel mio caso, ho utilizzato solo la funzione MAX per ottenere l'ultima data.

La formula finale sarà:

=DAYS360(A2; MAX(A2:A)) 
+2

Genio! Semplice ed efficace. – Asu

3

Anche se la domanda è già una risposta, c'è un modo eloquente di farlo.

Use just the column name to denote last non-empty row of that column. 

Ad esempio:

Se i dati sono in A1:A100 e si vuole essere in grado di aggiungere un po 'più dati per colonna A, dire che può essere A1:A105 o addirittura A1:A1234 successiva, è possibile utilizzare questa gamma :

A1:A 
+0

Mi piace, ma ho riscontrato problemi in cui a volte restituisce il penultimo elemento anziché l'ultimo. –

+0

@EricSmalling che può accadere perché si ha un avanzamento in più alla fine di tutte le righe e quando si copia incolla, può essere considerato come una cella non vuota. Disponi di un foglio di calcolo di esempio che esponga questo problema? –

5

Il mio preferito è:

=INDEX(A2:A,COUNTA(A2:A),1) 

Così, per la necessità del PO:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1)) 
+0

... anche se il "MAX" postato Poul sopra è più pulito nel caso in cui l'ultima data è sempre l'ultima. –

+0

Nessun punto che aggiunge ', 1' alla fine, c'è? –

0

Ecco un altro:

=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))) 

Con l'equazione finale è questo:

=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))) 

Le altre equazioni su qui funziona, ma mi piace questo uno perché rende facile ottenere il numero di riga, che trovo necessario fare più spesso. Proprio il numero di riga sarebbe come questo:

=max(arrayformula(if(A:A<>"",row(A:A),""))) 

Originariamente ho cercato di trovare solo a risolvere un problema di foglio di calcolo, ma non riusciva a trovare nulla di utile che ha appena dato il numero di riga l'ultima voce, quindi speriamo che questo è utile per qualcuno.

Inoltre, questo ha il vantaggio aggiunto che funziona per qualsiasi tipo di dati in qualsiasi ordine, e si possono avere righe vuote tra le righe con contenuto, e non conta le celle con formule che valutano "". Può anche gestire valori ripetuti. Tutto sommato è molto simile all'equazione che usa max ((G: G <> "") * row (G: G)) qui, ma rende più semplice il numero di riga se è quello che stai cercando .

In alternativa, se si desidera inserire uno script nel proprio foglio, è possibile renderlo più semplice se si pensa di farlo molto.Ecco che scirpt:

function lastRow(sheet,column) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    if (column == null) { 
    if (sheet != null) { 
     var sheet = ss.getSheetByName(sheet); 
    } else { 
     var sheet = ss.getActiveSheet(); 
    } 
    return sheet.getLastRow(); 
    } else { 
    var sheet = ss.getSheetByName(sheet); 
    var lastRow = sheet.getLastRow(); 
    var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues(); 
    for (i=0;i<array.length;i++) { 
     if (array[i] != '') {  
     var final = i + 1; 
     } 
    } 
    if (final != null) { 
     return final; 
    } else { 
     return 0; 
    } 
    } 
} 

Qui si può semplicemente digitare il seguente se si desidera che l'ultima riga sullo stesso del foglio che si sta modificando:

=LASTROW() 

o se si desidera che il ultima riga di una colonna particolare da quel foglio o di una determinata colonna da un altro foglio è possibile effettuare le seguenti operazioni:

=LASTROW("Sheet1","A") 

e per l'ultima riga di una particolare scheda in generale:

=LASTROW("Sheet1") 

Quindi per ottenere i dati effettivi è possibile utilizzare indirettamente:

=INDIRECT("A"&LASTROW()) 

oppure è possibile modificare lo script precedente alle ultime due linee di ritorno (gli ultimi due in quanto si avrebbe dovuto mettere entrambi il foglio e la colonna per ottenere il valore effettivo da una colonna effettiva), e sostituire la variabile con il seguente:

return sheet.getRange(column + final).getValue(); 

e

return sheet.getRange(column + lastRow).getValue(); 

Uno dei vantaggi di questo script è che è possibile scegliere se si desidera includere equazioni che valutano "". Se non vengono aggiunti argomenti, le equazioni che valutano in "" verranno conteggiate, ma se si specifica un foglio e una colonna verranno ora conteggiate. Inoltre, c'è molta flessibilità se sei disposto ad usare le varianti della sceneggiatura.

Probabilmente eccessivo, ma tutto possibile.