Rufen Sie die letzte nicht leere Zelle in einer Spalte in Google Sheets ab


139

Ich benutze die folgende Funktion

=DAYS360(A2, A35)

um die Differenz zwischen zwei Daten in meiner Spalte zu berechnen. Die Spalte wird jedoch ständig erweitert und ich muss derzeit 'A35' manuell ändern, wenn ich meine Tabelle aktualisiere.

Gibt es eine Möglichkeit (in Google Sheets), die letzte nicht leere Zelle in dieser Spalte zu finden und diesen Parameter dann in der obigen Funktion dynamisch festzulegen?


Antworten:


172

Es mag einen beredteren Weg geben, aber so habe ich es mir ausgedacht:

Die Funktion zum Suchen der zuletzt ausgefüllten Zelle in einer Spalte lautet:

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

Wenn Sie es also mit Ihrer aktuellen Funktion kombinieren, sieht es folgendermaßen aus:

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

1
Ich bin in diesem Fall nicht wirklich besorgt über Beredsamkeit, solange es wie ein Zauber wirkt (was es tut) - vielen Dank, Sam!
MichaelS

4
Am Ende habe ich mit der leeren Zeichenfolge verglichen, anstatt ISBLANK zu verwenden, das einige leer aussehende Zellen (z. B. leere Rückgabeformeln wie = "" als nicht leer behandelt. Also: '= Index (Filter (A: A, A: A) <> ""), Zeilen (Filter (A: A, A: A <> "")) '
circlepi314

Ich hatte auch Probleme mit der ISBLANK aufgrund von Formeln. Aber using = INDEX (FILTER (F3: F; F3: F ")"); ROWS (FILTER (F3: F; F3: F <> "")) führt zu einem Analysefehler der Formel. Irgendeine Idee was falsch ist?
Klor

Frage. Wenn anstelle von A: A ein importrange () vorhanden ist, wie kann dieser umgeschrieben werden, ohne dass der importrange () viermal ausgeführt wird?
Ruby

4
Leicht vereinfachte Antwort, die auch Leerzeichen behandelt, von Doug Bradshaw: =INDEX(FILTER(A1:A,NOT(ISBLANK(A1:A))),COUNTA(A1:A))(kann die Startzeile A1 ändern) vollständige Beschreibung unter: stackoverflow.com/a/27623407/539149
Zack Morris

82

So finden Sie die letzte nicht leere Zelle, die Sie verwenden können, INDEXund MATCHfunktionieren wie folgt:

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

Ich denke, das ist ein bisschen schneller und einfacher.


1
Das ist einfacher und ich habe das getestet. Funktioniert super.
Ciaran

24
Ihre Methode scheint die letzte Zelle nur zu finden, wenn der Wert eine Zahl ist. Meine Methode findet die letzte Zeile, wenn sie ebenfalls vom Typ string ist. Die ursprüngliche Frage betraf Daten, also würde dies funktionieren, aber da der Artikel immer noch Aufmerksamkeit erhält, ist es erwähnenswert, den Unterschied festzustellen. Es hängt alles von Ihren Bedürfnissen ab. Wenn Sie nur eine Nummer benötigen, empfehle ich diesen Weg.
Sam Plus Plus

1
Dies setzt voraus, dass die Spalte sortiert ist
Andrej Adamenko

=DAYS360(A2;VLOOKUP(99^99;A:A;1))
Könnte

55

Wenn A2: A zusammenhängende Daten enthält, gibt INDEX (A2: A, COUNT (A2: A)) das letzte Datum zurück. Die endgültige Formel lautet

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

9
Persönlich denke ich, dass dies die akzeptierte Antwort sein sollte. Prägnant und einfach.
SwampThingTom

4
Dies ist die genaueste Antwort. Während die obige Antwort von @Poul für diesen Fall funktioniert, wollte ich die tatsächliche letzte Zelle mit den tatsächlichen Daten finden und dies zeigt, ob die Daten in Ordnung sind oder nicht.
Chuck Claunch

4
Dies ist perfekt. Zweitens der Antrag, dass es die akzeptierte Antwort sein sollte.
Shiri

37

Mein Liebling ist:

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

Also, für die Bedürfnisse des OP:

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

... obwohl der "MAX", den Poul oben gepostet hat, sauberer aussieht, wenn das letzte Datum immer das späteste ist.
Eric Smalling

1
Er meinte +1 nicht, 1
Newbrict

1
Dies beantwortet die Frage nicht - es wird der letzte Wert ausgewählt, aber nicht der letzte nicht leere Wert.
NateS

17

Wenn die Spalte wie in meinem Fall nur durch zusammenhängend hinzugefügte Daten erweitert wurde, habe ich nur die MAX-Funktion verwendet, um das letzte Datum abzurufen.

Die endgültige Formel lautet:

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

3
Genius! Einfach und effektiv.
Asu

14

Obwohl die Frage bereits beantwortet ist, gibt es einen beredten Weg, dies zu tun.

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

Beispielsweise:

Wenn sich Ihre Daten in befinden A1:A100und Sie in der Lage sein möchten, weitere Spalten zu Spalte A hinzuzufügen, z. B. A1:A105oder sogar A1:A1234später, können Sie diesen Bereich verwenden:

A1:A

Stichprobe

Um den letzten nicht leeren Wert in einem Bereich zu erhalten, verwenden wir zwei Funktionen:

  • COUNTA
  • INDEX

Die Antwort lautet =INDEX(B3:B,COUNTA(B3:B)).

Hier ist die Erklärung:

COUNTA(range) Gibt die Anzahl der Werte in einem Bereich zurück. Wir können dies verwenden, um die Anzahl der Zeilen zu ermitteln.

INDEX(range, row, col)gibt den Wert in einem Bereich an Position zurück rowund col( col=1falls nicht angegeben)

Beispiele:

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

Für das Bild oben wird unser Sortiment sein B3:B. So werden wir zählen , wie viele Werte gibt es in Bereich B3:Bvon COUNTA(B3:B)zuerst. Auf der linken Seite wird es erzeugt, 8da es 8 Werte gibt, während es 9auf der rechten Seite erzeugt wird. Wir wissen auch, dass der letzte Wert in der 1. Spalte des Bereichs liegt, B3:Bdaher muss der colParameter von INDEX1 sein und der rowParameter sollte sein COUNTA(B3:B).

PS : Bitte stimmen Sie der Antwort von @ bloodymurderlive zu , da er sie zuerst geschrieben hat. Ich erkläre sie hier nur.


1
Ich mag das, habe aber Probleme gesehen, bei denen manchmal das vorletzte Element anstelle des letzten zurückgegeben wird.
Eric Smalling

1
@EricSmalling, das auftreten kann, weil Sie am Ende aller Zeilen einen zusätzlichen Zeilenvorschub haben. Wenn Sie ihn kopieren und einfügen, wird er möglicherweise als nicht leere Zelle betrachtet. Haben Sie eine Beispieltabelle, die dieses Problem aufdeckt?
Ramazan Polat

Sieht nach der klügsten Lösung aus!
MemLeak

Es funktioniert nicht. Woher hast du übrigens das Zitat? Ich dachte, es ist aus der Google Sheet-Dokumentation.
Atul

1
@RamazanPolat: OP fragt nach der Möglichkeit (in Google Sheets), die letzte nicht leere Zelle in der Spalte zu finden, und A1:A gibt mir nicht den letzten nicht leeren Zellenwert in Spalte A
Atul

8

Hier ist ein anderes:

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

Die letzte Gleichung lautet:

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

Die anderen Gleichungen hier funktionieren, aber ich mag diese, weil sie das Abrufen der Zeilennummer erleichtert, was ich häufiger tun muss. Nur die Zeilennummer würde so aussehen:

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

Ich habe ursprünglich versucht, genau dies zu finden, um ein Tabellenkalkulationsproblem zu lösen, konnte jedoch nichts Nützliches finden, das nur die Zeilennummer des letzten Eintrags angegeben hat. Hoffentlich ist dies für jemanden hilfreich.

Dies hat außerdem den zusätzlichen Vorteil, dass es für jeden Datentyp in beliebiger Reihenfolge funktioniert und Sie zwischen Zeilen mit Inhalt leere Zeilen haben können und Zellen mit Formeln, die als "" ausgewertet werden, nicht gezählt werden. Es kann auch wiederholte Werte verarbeiten. Alles in allem ist es der Gleichung sehr ähnlich, die hier max ((G: G <> "") * row (G: G)) verwendet, aber das Herausziehen der Zeilennummer ein wenig erleichtert, wenn Sie danach suchen .

Wenn Sie alternativ ein Skript auf Ihr Blatt setzen möchten, können Sie es sich leicht machen, wenn Sie vorhaben, dies häufig zu tun. Hier ist dieser 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;
    }
  }
}

Hier können Sie einfach Folgendes eingeben, wenn Sie die letzte Zeile auf demselben Blatt haben möchten, das Sie gerade bearbeiten:

=LASTROW()

oder wenn Sie die letzte Zeile einer bestimmten Spalte aus diesem Blatt oder einer bestimmten Spalte aus einem anderen Blatt möchten, können Sie Folgendes tun:

=LASTROW("Sheet1","A")

Und für die letzte Zeile eines bestimmten Blattes im Allgemeinen:

=LASTROW("Sheet1")

Um die tatsächlichen Daten zu erhalten, können Sie entweder indirekt verwenden:

=INDIRECT("A"&LASTROW())

oder Sie können das obige Skript in den letzten beiden Rückgabezeilen ändern (die letzten beiden, da Sie sowohl das Blatt als auch die Spalte einfügen müssten, um den tatsächlichen Wert aus einer tatsächlichen Spalte zu erhalten) und die Variable durch die folgende ersetzen:

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

und

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

Ein Vorteil dieses Skripts besteht darin, dass Sie auswählen können, ob Sie Gleichungen einschließen möchten, die mit "" bewertet werden. Wenn keine Argumente hinzugefügt werden, werden Gleichungen gezählt, die mit "" bewertet werden. Wenn Sie jedoch ein Blatt und eine Spalte angeben, werden sie jetzt gezählt. Es gibt auch viel Flexibilität, wenn Sie bereit sind, Variationen des Skripts zu verwenden.

Wahrscheinlich übertrieben, aber alles möglich.


1
"Unbekannte Funktion LASTROW"
Berit Larsen

Sollte +100 sein, um die Überschrift der Frage tatsächlich zu beantworten: Letzte Zeile, kein Wert in der letzten Zeile
Norbert van Nobelen

6

Was ist mit dieser Formel, um den letzten Wert zu erhalten:

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

Und dies wäre eine endgültige Formel für Ihre ursprüngliche Aufgabe:

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

Angenommen, Ihr ursprüngliches Datum ist in G10.


5

Ich bin einen anderen Weg gegangen. Da ich weiß, dass ich einer Zeile / Spalte nacheinander etwas hinzufügen werde, finde ich die letzte Zeile heraus, indem ich zuerst die Felder mit Daten zähle. Ich werde dies mit einer Kolumne demonstrieren:

=COUNT(A5:A34)

Nehmen wir also an, dass 21 zurückgegeben wurde. A5 ist 4 Zeilen tiefer, also muss ich die 21. Position von der 4. Reihe nach unten bekommen. Ich kann dies mit inderect tun, wie folgt:

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

Es geht darum, die Anzahl der Zeilen mit Daten zu ermitteln und mir eine Zahl zurückzugeben, die ich als Indexmodifikator verwende.


1
Beachten Sie, dass keine leeren Zellen vorhanden sein dürfen. Außerdem sollte COUNTA zu mehr Szenarien passen
bieten Z. Khullah

4

für eine Reihe:

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

für eine Spalte:

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

1
Hervorragende Antwort. Danke dir.
Nick

2

Dies scheint die einfachste Lösung zu sein, die ich gefunden habe, um den letzten Wert in einer ständig wachsenden Spalte abzurufen:

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

2

Das funktioniert bei mir. Abrufen des letzten Werts der Spalte A in Google Sheet:

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

(Es werden auch leere Zeilen dazwischen übersprungen, falls vorhanden.)


1

Berechnen Sie die Differenz zwischen dem letzten Datum in Spalte A und dem Datum in Zelle A2.

=MAX(A2:A)-A2

1

Dies gibt den Inhalt der letzten Zelle:

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

Dies gibt die Adresse der letzten Zelle an:

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

Dies gibt die Zeile der letzten Zelle an:

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

Vielleicht bevorzugen Sie ein Skript. Dieses Skript ist viel kürzer als das große, das oben von jemand anderem gepostet wurde:

Gehen Sie zum Skripteditor und speichern Sie dieses Skript:

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

Wenn dies erledigt ist, müssen Sie dies nur in eine Zelle eingeben:

=getLastRow(A:A)

0

Die Art und Weise, wie ein Amateur dies tut, ist "= CONCATENATE (" A ", COUNTUNIQUE (A1: A9999))", wobei A1 die erste Zelle in der Spalte ist und A9999 weiter unten in dieser Spalte liegt, als ich jemals erwartet habe, Einträge zu haben. Dieses resultierende A # kann bei Bedarf mit der INDIRECT-Funktion verwendet werden.


Es tut uns leid. Dies funktioniert nur, wenn alle Einträge in der Spalte eindeutig sind.
Conrad Lindes

1
Obwohl ich Ihren Beitrag zu StackOverflow, Conrad, sehr schätze, hat Ihre Antwort einige Probleme. Erstens hat er nicht angegeben, dass die Daten eindeutig sind, daher sollten Sie count () anstelle von countunique () verwenden. Zweitens dupliziert die Verwendung von indirekt () und verkettet die vorhandene Funktionalität von index (), wie Sie in den anderen Antworten sehen können. Drittens, anstatt A1: A9999, warum nicht einfach A1: A verwenden?
sondra.kinsey

0

Um die letzte nicht leere Zeilennummer zu finden (wobei Leerzeichen zwischen ihnen zulässig sind), habe ich unten die Spalte durchsucht A.

=ArrayFormula(IFNA(match(2,1/(A:A<>""))))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.