Ich habe eine Tabelle mit einigen Werten in Spalte G. Einige Zellen sind dazwischen leer, und ich muss den letzten Wert aus dieser Spalte in eine andere Zelle übertragen.
Etwas wie:
=LAST(G2:G9999)
außer das LAST
ist keine Funktion.
quelle
Ich habe eine Tabelle mit einigen Werten in Spalte G. Einige Zellen sind dazwischen leer, und ich muss den letzten Wert aus dieser Spalte in eine andere Zelle übertragen.
Etwas wie:
=LAST(G2:G9999)
außer das LAST
ist keine Funktion.
Diese Lösung verwendet also einen String als Parameter. Es wird ermittelt, wie viele Zeilen sich im Blatt befinden. Es werden alle Werte in der angegebenen Spalte abgerufen. Es durchläuft die Werte vom Ende bis zum Anfang, bis ein Wert gefunden wird, der keine leere Zeichenfolge ist. Schließlich wird der Wert neu eingestellt.
Skript:
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
Verwendung:
=lastValue("G")
BEARBEITEN:
Als Antwort auf den Kommentar, in dem die Funktion automatisch aktualisiert wird:
Der beste Weg, den ich finden konnte, ist, dies mit dem obigen Code zu verwenden:
function onEdit(event) {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}
Es wäre nicht länger erforderlich, die Funktion in einer Zelle zu verwenden, wie im Abschnitt " Verwendung " angegeben. Stattdessen codieren Sie die Zelle, die Sie aktualisieren möchten, und die Spalte, die Sie verfolgen möchten, hart. Es ist möglich, dass es einen eloquenteren Weg gibt, dies zu implementieren (hoffentlich einen, der nicht fest codiert ist), aber dies ist der beste, den ich jetzt finden konnte.
Beachten Sie, dass die Funktion beim erneuten Laden aktualisiert wird, wenn Sie sie wie oben angegeben in der Zelle verwenden. Vielleicht gibt es eine Möglichkeit, sich in Zellenfunktionen einzuklinken onEdit()
und deren Aktualisierung zu erzwingen. Ich kann es einfach nicht in der Dokumentation finden.
Tools -> Scripts -> Script editor...
Ähnliche Antwort auf Caligaris Antwort , aber wir können sie aufräumen, indem wir nur den vollständigen Spaltenbereich angeben :
quelle
FILTER()
ed-Bereich abgerufen wird, ähnlich wie bei @ Getas Antwort .COUNT(G2:G)
Wenn Ihre Spalte Leerzeichen enthält, funktioniert dies nicht, da 0 zurückgegeben wird. Verwenden Sie stattdessenCOUNTA(G2:G)
nur die Anzahl der Werte in einem Dataset.COUNTA
ist nur dann nützlichINDEX
, wenn Sie den letzten Wert erhalten, wenn zwischen Ihren Werten kein einziges Leerzeichen steht.COUNTA
.COUNT
zählt nur numerische Werte: Es wird 0 zurückgegeben, wenn z. B. Textzellen angegeben werden.Eigentlich habe ich hier eine einfachere Lösung gefunden:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=de
Es sieht aus wie das:
quelle
ROW
Gibt die Zeilennummer zurück,FILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) )
gibt also ein Array aller nicht leeren Zeilennummern (nicht deren Werte) zurück, z. B. [1,2, 3, 7, 12, 14]. DannMAX
gibt uns die letzte Zeilennummer. Eine SekundeFILTER
wird dann angewendet, um alle Zeilen herauszufiltern, bei denen die Zeilennummer nicht mit dem Wert von übereinstimmtMAX
(dh dem Wert der letzten nicht leeren Zeile).Die Funktion LAST () ist derzeit nicht implementiert, um die letzte Zelle innerhalb eines Bereichs auszuwählen. Folgen Sie jedoch Ihrem Beispiel:
Mit den beiden Funktionen INDEX () und COUNT () können wir die letzte Zelle auf folgende Weise erhalten:
Es gibt ein Live-Beispiel auf dem Spreedsheet, in dem ich das gleiche Problem (Blatt
Orzamentos
, ZelleI5
) gefunden (und gelöst ) habe. Beachten Sie, dass es auch unter Bezugnahme auf andere Blätter im Dokument einwandfrei funktioniert.quelle
COUNTA
in diesem Fall verwenden, wenn Sie sicher sind, dass zwischen den Werten in der Spalte kein einziges Leerzeichen steht. Siehe meine Kommentare zu Dohmooses Antwort.:G
bezeichnet das letzte Element? Ist das dokumentiert?Zusammenfassung:
Einzelheiten:
Ich habe mehrere Antworten durchgesehen und ausprobiert, und Folgendes habe ich gefunden: Die einfachste Lösung (siehe Dohmoose-Antwort ) funktioniert, wenn keine Leerzeichen vorhanden sind:
Wenn Sie Leerzeichen haben, schlägt dies fehl.
Sie können mit einem Leerzeichen umgehen, indem Sie einfach von
COUNT
zu wechselnCOUNTA
(siehe Antwort von user3280071 ):Dies schlägt jedoch bei einigen Kombinationen von Leerzeichen fehl. (
1 blank 1 blank 1
scheitert für mich.)Der folgende Code funktioniert (siehe Naders Antwort und Jasons Kommentar ):
Sie müssen jedoch darüber nachdenken, ob Sie einen bestimmten Bereich verwenden möchten
COLUMNS
oder nichtROWS
.Wenn
COLUMNS
jedoch durch ersetzt wirdCOUNT
, erhalte ich anscheinend eine zuverlässige, leere Implementierung vonLAST
:Und da
COUNTA
der Filter eingebaut ist, können wir die Verwendung weiter vereinfachenDas ist etwas einfach und richtig. Und Sie müssen sich keine Gedanken darüber machen, ob Sie Zeilen oder Spalten zählen sollen. Und im Gegensatz zu Skriptlösungen wird es automatisch mit Änderungen an der Tabelle aktualisiert.
Und wenn Sie den letzten Wert in einer Zeile erhalten möchten, ändern Sie einfach den Datenbereich:
quelle
Um den letzten Wert aus einer Spalte mit Textwerten zurückzugeben, müssen Sie COUNTA verwenden. Daher benötigen Sie die folgende Formel:
quelle
COUNTA
Kombination mitINDEX
nicht der letzte Wert in der Spalte zurückgegeben.Versuche dies:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Angenommen, die Spalte, in der Sie nach dem letzten Wert suchen, ist B.
Und ja, es funktioniert mit Leerzeichen.
quelle
Es sieht so aus, als ob Google Apps Script jetzt Bereiche als Funktionsparameter unterstützt. Diese Lösung akzeptiert einen Bereich:
Siehe auch Diskussion im Google Apps Script-Hilfeforum: Wie erzwinge ich die Neuberechnung von Formeln?
quelle
Ich habe mir die vorherigen Antworten angesehen und sie scheinen zu hart zu arbeiten. Vielleicht hat sich die Skriptunterstützung einfach verbessert. Ich denke, die Funktion wird folgendermaßen ausgedrückt:
In meiner Tabelle verwende ich dann:
In der Funktion erhalte ich ein Array von Werten mit einem pro referenzierter Zelle, und dies iteriert nur vom Ende des Arrays rückwärts, bis ein nicht leerer Wert gefunden wird oder keine Elemente mehr vorhanden sind. Blattreferenzen sollten interpretiert werden, bevor die Daten an die Funktion übergeben werden. Auch nicht schick genug, um mit mehreren Dimensionen umzugehen. Die Frage hat nach der letzten Zelle in einer einzelnen Spalte gefragt, daher scheint sie zu passen. Es wird wahrscheinlich sterben, wenn Ihnen auch die Daten ausgehen.
Ihr Kilometerstand kann variieren, aber das funktioniert bei mir.
quelle
keine harte Codierung.
quelle
Dieser funktioniert für mich:
quelle
Dies erhält den letzten Wert und behandelt leere Werte:
quelle
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
In einer Spalte mit Leerzeichen können Sie den letzten Wert mit abrufen
quelle
Die Antwort
funktioniert in LibreOffice nicht richtig. Mit einer kleinen Änderung funktioniert es jedoch perfekt.
Es funktioniert immer nur, wenn der wahre Bereich kleiner als ist
(G2:G10000)
quelle
Ist es akzeptabel, die ursprüngliche Frage mit einer streng vom Thema abweichenden Antwort zu beantworten :) Sie können dazu eine Formel in die Tabelle schreiben. Hässlich vielleicht? aber effektiv im normalen Betrieb einer Tabelle.
Dies wird als Gedanke für eine Reihe von Fragen im Skriptbereich angeboten, die zuverlässig mit Array-Formeln geliefert werden können, die den Vorteil haben, dass sie in Excel und Openoffice häufig auf ähnliche Weise arbeiten.
quelle
quelle
Ich habe mit dem von @tinfini angegebenen Code gespielt und dachte, die Leute könnten von einer meiner Meinung nach etwas eleganteren Lösung profitieren (beachten Sie, dass Skripte bei der Erstellung der ursprünglichen Antwort nicht ganz so funktionierten) ...
Im Gebrauch würde es so aussehen:
quelle
In Bezug auf den Kommentar von @ Jon_Schneider verwenden Sie einfach COUNTA () , wenn die Spalte leere Zellen enthält.
quelle
Ich habe einen anderen Weg gefunden, vielleicht hilft er Ihnen
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-wird die letzte Zeile zurückgebenWeitere Informationen von anab hier: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
quelle
Es wurde eine geringfügige Abweichung gefunden, mit der Leerzeichen am unteren Rand der Tabelle entfernt wurden. = Index (G2: G, COUNTIF (G2: G, "<>"))
quelle
Ich bin überrascht, dass noch nie jemand diese Antwort gegeben hat. Aber dies sollte der kürzeste sein und es funktioniert sogar in Excel:
G2:G<>""
Erstellt ein Array aus 1 / true (1) und 1 / false (0). DaLOOKUP
ein Top-Down-Ansatz zu finden ist2
und Da es nie 2 findet, kommt es bis zur letzten nicht leeren Zeile und gibt die Position davon an.Der andere Weg, dies zu tun, wie andere vielleicht erwähnt haben, ist:
Finden Sie das
MAX
ImumROW
der nicht leeren Reihe und füttern Sie esINDEX
In einem Null-Leerzeichen-Unterbrechungsarray ist die Verwendung der
INDIRECT
RC
Notation mitCOUNTBLANK
eine weitere Option. Wenn V4: V6 mit Einträgen belegt ist, dannV18 :
gibt die Position von V6 an.
quelle
Um den letzten Wert aus einer Spalte zu erhalten, können Sie auch
MAX
Funktion mitIF
Funktion verwendenquelle