Ottieni l'ultima cella non vuota in una colonna in Fogli Google


140

Uso la seguente funzione

=DAYS360(A2, A35)

per calcolare la differenza tra due date nella mia colonna. Tuttavia, la colonna è in continua espansione e attualmente devo cambiare manualmente "A35" mentre aggiorno il mio foglio di calcolo.

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


Risposte:


172

Potrebbe esserci un modo più eloquente, ma è così che mi sono inventato:

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 lo combini con la tua funzione attuale sembrerebbe così:

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

1
In questo caso non mi preoccupo molto dell'eloquenza fintanto che funziona come un incantesimo (cosa che fa) - grazie mille Sam!
MichaelS,

4
Ho finito per confrontarmi con la stringa vuota piuttosto che usare ISBLANK, che tratta alcune celle dall'aspetto vuoto (ad esempio formule a ritorno vuoto come = "" come non vuote. Pertanto: '= indice (filtro (A: A, A: A <> ""), righe (filtro (A: A, A: A <> ""))) '
circlepi314

Ho anche avuto problemi con ISBLANK a causa delle formule. Ma usando = INDICE (FILTRO (F3: F; F3: F <> "")); ROWS (FILTER (F3: F; F3: F <> "")) errore di analisi della formula dei risultati. Qualche idea su cosa sia sbagliato?
Klor,

Domanda. Se invece di A: A, c'è un importrange (), come può essere riscritto senza fare lo stesso importrange () 4 volte?
Ruby

4
Risposta leggermente semplificata che gestisce anche gli spazi vuoti, di Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(può cambiare la riga iniziale A1) descrizione completa su: stackoverflow.com/a/27623407/539149
Zack Morris,

82

Per trovare l'ultima cella non vuota che puoi utilizzare INDEXe MATCHfunzioni in questo modo:

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

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


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

24
Il tuo metodo sembra trovare l'ultima cella solo se il valore è un numero, il mio metodo troverà l'ultima riga se è anche di tipo stringa. La domanda originale riguardava le date, quindi avrebbe funzionato, ma visto che l'articolo continua ad attirare l'attenzione, vale la pena notare la differenza. Dipende dai tuoi bisogni. Se hai solo bisogno di un numero, ti consiglio in questo modo.
Sam Plus Plus,

1
Ciò presuppone che la colonna sia ordinata
Andrej Adamenko,

Inoltre potrebbe essere fatto come=DAYS360(A2;VLOOKUP(99^99;A:A;1))
vstepaniuk il

56

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

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

9
Personalmente penso che questa dovrebbe essere la risposta accettata. Conciso e semplice.
SwampThingTom

4
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.
Chuck Claunch

4
Questo è perfetto. In secondo luogo la mozione che dovrebbe essere la risposta accettata.
shiri,

37

Il mio preferito è:

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

Quindi, per le necessità del PO:

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

... anche se quello "MAX" pubblicato sopra Poul è più pulito nel caso in cui l'ultima data sia sempre l'ultima.
Eric Smalling,

1
Intendeva +1 no, 1
Newbrict

1
Questo non risponde alla domanda: seleziona l'ultimo valore, ma non l'ultimo valore non vuoto.
NateS,

17

Se la colonna si espandeva solo con date aggiunte contigue come nel mio caso, ho usato solo la funzione MAX per ottenere l'ultima data.

La formula finale sarà:

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

3
Genio! Semplice ed efficace
Asu,

14

Sebbene la domanda abbia già una risposta, esiste un modo eloquente per farlo.

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

Per esempio:

Se i tuoi dati sono presenti A1:A100e vuoi essere in grado di aggiungere altri dati alla colonna A, supponi che possano essere A1:A105o anche A1:A1234più tardi, puoi utilizzare questo intervallo:

A1:A

Campione

Quindi per ottenere l'ultimo valore non vuoto in un intervallo, utilizzeremo 2 funzioni:

  • COUNTA
  • INDICE

La risposta è =INDEX(B3:B,COUNTA(B3:B)).

Ecco la spiegazione:

COUNTA(range) restituisce il numero di valori in un intervallo, possiamo usarlo per ottenere il conteggio delle righe.

INDEX(range, row, col)restituisce il valore in un intervallo in posizione rowe col( col=1se non specificato)

Esempi:

INDEX(A1:C5,1,1) = A1
INDEX(A1:C5,1) = A1 # implicitly states that col = 1
INDEX(A1:C5,1,2) = A2
INDEX(A1:C5,2,1) = B1
INDEX(A1:C5,2,2) = B2
INDEX(A1:C5,3,1) = C1
INDEX(A1:C5,3,2) = C2

Per l'immagine sopra, la nostra gamma sarà B3:B. Quindi contiamo quanti valori ci sono nell'intervallo B3:Bper COUNTA(B3:B)primo. Nella parte sinistra, produrrà 8poiché ci sono 8 valori mentre produrrà 9nella parte destra. Sappiamo anche che l'ultimo valore è nella prima colonna dell'intervallo, B3:Bquindi il colparametro di INDEXdeve essere 1 e il rowparametro dovrebbe essere COUNTA(B3:B).

PS : per favore, vota la risposta di @ bloodymurderlive da quando l'ha scritta per prima, lo sto solo spiegando qui.


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

1
@EricSmalling che può accadere perché hai un avanzamento riga aggiuntivo alla fine di tutte le righe e quando lo copi incolli, può essere considerato una cella non vuota. Hai qualche foglio di calcolo di esempio che espone questo problema?
Ramazan Polat,

Sembra la soluzione più intelligente!
MemLeak

Non funziona Da dove hai preso la citazione da BTW? Ho pensato che fosse dalla documentazione del foglio di Google.
Atul,

1
@RamazanPolat: OP sta chiedendo al modo (in Fogli Google) di trovare l'ultima cella non vuota nella colonna A1:A non mi dà l'ultimo valore della cella non vuota nella colonna A
Atul

8

Eccone un altro:

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

Con l'equazione finale questa:

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

Le altre equazioni qui funzionano, ma questa mi piace perché rende facile ottenere il numero di riga, che trovo necessario fare più spesso. Solo il numero di riga sarebbe così:

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

Inizialmente ho cercato di trovare proprio questo per risolvere un problema con un foglio di calcolo, ma non sono riuscito a trovare nulla di utile che fornisse il numero di riga dell'ultima voce, quindi spero che questo sia utile per qualcuno.

Inoltre, questo ha l'ulteriore vantaggio che funziona per qualsiasi tipo di dati in qualsiasi ordine e che puoi avere righe vuote tra le righe con il 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 estrarre il numero di riga se è quello che stai cercando .

In alternativa, se vuoi mettere una sceneggiatura sul tuo foglio, puoi semplificarti se hai intenzione 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 puoi semplicemente digitare quanto segue se desideri l'ultima riga sullo stesso foglio che stai modificando:

=LASTROW()

o se vuoi l'ultima riga di una colonna particolare da quel foglio, o di una colonna particolare da un altro foglio puoi fare quanto segue:

=LASTROW("Sheet1","A")

E per l'ultima riga di un particolare foglio in generale:

=LASTROW("Sheet1")

Quindi per ottenere i dati effettivi è possibile utilizzare indirettamente:

=INDIRECT("A"&LASTROW())

oppure puoi modificare lo script precedente nelle ultime due righe di ritorno (le ultime due poiché dovresti inserire sia il foglio che la colonna per ottenere il valore effettivo da una colonna effettiva) e sostituire la variabile con la seguente:

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

e

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

Un vantaggio di questo script è che puoi scegliere se vuoi includere equazioni che valutano "". Se non vengono aggiunti argomenti, le equazioni che valutano "" verranno conteggiate, ma se si specifica un foglio e una colonna verranno ora conteggiati. Inoltre, c'è molta flessibilità se sei disposto a usare varianti dello script.

Probabilmente eccessivo, ma tutto possibile.


1
"Funzione sconosciuta LASTROW"
Berit Larsen,

Dovrebbe essere +100 per aver effettivamente risposto al titolo della domanda: ultima riga, non valore nell'ultima riga
Norbert van Nobelen

6

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 tuo compito originale:

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

Supponi che la tua data iniziale sia in G10.


5

Ho preso una strada diversa. Dal momento che so che aggiungerò qualcosa in una riga / colonna una per una, scopro l'ultima riga contando prima i campi che contengono dati. Lo dimostrerò con una colonna:

=COUNT(A5:A34)

Quindi, diciamo che ha restituito 21. A5 è 4 righe in basso, quindi ho bisogno di ottenere la 21a posizione dalla 4a riga in basso. Posso farlo usando inderect, in questo modo:

=INDIRECT("A"&COUNT(A5:A34)+4)

Sta trovando la quantità di righe con i dati e mi restituisce un numero che sto usando come modificatore di indice.


1
Si noti che non ci possono essere celle vuote. Inoltre, COUNTA dovrebbe adattarsi a più scenari
Z. Khullah,

4

per una riga:

=ARRAYFORMULA(INDIRECT("A"&MAX(IF(A:A<>"", ROW(A:A), ))))

per una colonna:

=ARRAYFORMULA(INDIRECT(ADDRESS(1, MAX(IF(1:1<>"", COLUMN(1:1), )), 4)))

1
Risposta eccellente. Grazie.
Nick,

2

Questa sembra la soluzione più semplice che ho trovato per recuperare l'ultimo valore in una colonna in continua espansione:

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

2

Questo funziona per me. Ottieni l'ultimo valore della colonna A nel foglio di Google:

=index(A:A,max(row(A:A)*(A:A<>"")))

(Salta anche le righe vuote tra eventuali)


1

Calcola la differenza tra la data più recente nella colonna A con la data nella cella A2.

=MAX(A2:A)-A2

1

Questo darà il contenuto dell'ultima cella:

=indirect("A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>""))))

Questo darà l'indirizzo dell'ultima cella:

="A"&max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Questo darà la riga dell'ultima cella:

=max(ARRAYFORMULA(row(a:a)*--(a:a<>"")))

Forse preferiresti una sceneggiatura. Questo script è molto più breve di quello enorme pubblicato sopra da qualcun altro:

Vai all'editor di script e salva questo script:

function getLastRow(range){
  while(range.length>0 && range[range.length-1][0]=='') range.pop();
  return range.length;
}

Una volta fatto, devi solo inserirlo in una cella:

=getLastRow(A:A)

0

Il modo in cui lo fa un dilettante è "= CONCATENATE (" A ", COUNTUNIQUE (A1: A9999))", dove A1 è la prima cella nella colonna e A9999 è più in basso nella colonna di quanto mi aspetto di avere voci. Questo A # risultante può essere utilizzato con la funzione INDIRETTA secondo necessità.


Scusate. Funziona solo se tutte le voci nella colonna sono uniche.
Conrad Lindes,

1
Mentre apprezzo il tuo contributo a StackOverflow, Conrad, la tua risposta presenta alcuni problemi. Innanzitutto, non ha specificato che le date fossero uniche, quindi dovresti usare count (), anziché countunique (). In secondo luogo, l'utilizzo di duplicati indiretti () e concatenati delle funzionalità esistenti di index (), come è possibile vedere nelle altre risposte. Terzo, invece di A1: A9999, perché non usare solo A1: A?
sondra.kinsey,

0

Per trovare l'ultimo numero di riga non vuoto (consentendo spazi vuoti tra loro) ho usato di seguito per cercare la colonna A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.