Kennt jemand die Formel, um den Wert der letzten nicht leeren Zelle in einer Spalte in Microsoft Excel zu finden?
excel
worksheet-function
MichaelS
quelle
quelle
Antworten:
Dies funktioniert sowohl mit Text als auch mit Zahlen und es ist egal, ob leere Zellen vorhanden sind, dh es wird die letzte nicht leere Zelle zurückgegeben.
Es muss ein Array eingegeben werden , dh Sie drücken Strg-Umschalt-Eingabetaste, nachdem Sie es eingegeben oder eingefügt haben. Das Folgende gilt für Spalte A:
quelle
CELL()
oder übergeben werden kannOFFSET()
), während der höher bewertete einen Wert zurückgibt, ohne Ihnen zu sagen, wo er sich befindet.Die folgende einfache Formel zu verwenden ist viel schneller
Für Excel 2003:
Es bietet Ihnen folgende Vorteile:
Erläuterung:
(A:A<>"")
Gibt das Array zurück{TRUE,TRUE,..,FALSE,..}
1/(A:A<>"")
ändert dieses Array in{1,1,..,#DIV/0!,..}
.LOOKUP
erwartet wird, dass das sortierte Array in aufsteigender Reihenfolge sortiert ist und berücksichtigt wird, dass dieLOOKUP
Funktion , wenn sie keine exakte Übereinstimmung finden kann, den größten Wert inlookup_range
(in unserem Fall{1,1,..,#DIV/0!,..}
) auswählt, der kleiner oder gleich dem Wert (in unserem Fall2
) ist. Die Formel findet den letzten1
im Array und gibt den entsprechenden Wert vonresult_range
(dritter Parameter -A:A
) zurück.Auch kleine Anmerkung - obige Formel berücksichtigt keine fehlerhaften Zellen (Sie können sie nur sehen, wenn die letzte nicht leere Zelle einen Fehler aufweist). Wenn Sie sie berücksichtigen möchten, verwenden Sie:
Bild unten zeigt den Unterschied:
quelle
LOOKUP
besagt, dass das letzte Argumentresult_vector
optional ist. Wenn ich es jedoch weglasse, erhalte ich ein sehr seltsames Ergebnis, das ich nicht verstehe.LOOKUP
Funktion das nicht finden kannlookup_value
, stimmt die Funktion mit dem größten Wert überein, derlookup_vector
kleiner oder gleich ist.lookup_value.
" Wenn ich=LOOKUP(2,A:A<>"",A:A)
den#DIV/0!
Fehler ohne Generierung von verwende1/...
, scheint es, dass sie einen Wert in der Mitte von zurückgibt der Vektor. Ich habe nicht gefunden, was die genaue Funktionalität in diesem Fall ist.=LOOKUP(2,1/(A:A<>""),ROW(A:A))
aber das Hinzufügen einerROW
Funktion fügt den "Volatilitäts" -Effekt hinzu - die Formel wird jedes Mal neu berechnet, wenn eine Zelle auf dem Arbeitsblatt geändert wirdHier ist eine weitere Option:
=OFFSET($A$1;COUNTA(A:A)-1;0)
quelle
COUNTA
anstelle von verwendenCOUNT
). Ganz zu schweigen von leeren Zellen.Inspiriert von der großartigen Führung durch Doug Glancys Antwort, fand ich einen Weg, dasselbe zu tun, ohne eine Array-Formel zu benötigen. Fragen Sie mich nicht warum, aber ich möchte die Verwendung von Array-Formeln möglichst vermeiden (nicht aus irgendeinem Grund, es ist nur mein Stil).
Hier ist es:
Zum Suchen der letzten nicht leeren Zeile mit Spalte A als Referenzspalte
Zum Suchen der letzten nicht leeren Spalte mit Zeile 1 als Referenzzeile
Dies kann in Verbindung mit der Indexfunktion weiter verwendet werden, um dynamische benannte Bereiche effizient zu definieren. Dies ist jedoch etwas für einen anderen Beitrag, da dies nicht mit der hier angesprochenen unmittelbaren Frage zusammenhängt.
Ich habe die oben genannten Methoden mit Excel 2010 sowohl "nativ" als auch im "Kompatibilitätsmodus" (für ältere Versionen von Excel) getestet und sie funktionieren. Auch hier müssen Sie Strg + Umschalt + Eingabetaste nicht ausführen. Indem wir die Funktionsweise von Sumproduct in Excel nutzen, können wir uns auf die Notwendigkeit konzentrieren, Array-Operationen durchzuführen, aber wir tun dies ohne eine Array-Formel. Ich hoffe, jemand da draußen wird die Schönheit, Einfachheit und Eleganz dieser vorgeschlagenen Summenproduktlösungen genauso schätzen wie ich. Ich bestätige jedoch nicht die Speichereffizienz der oben genannten Lösungen. Nur dass sie einfach sind, schön aussehen, dem beabsichtigten Zweck helfen und flexibel genug sind, um ihre Verwendung auf andere Zwecke auszudehnen :)
Hoffe das hilft!
Alles Gute!
quelle
Ich weiß, dass diese Frage alt ist, aber ich bin mit den Antworten nicht zufrieden.
LOOKUP, VLOOKUP und HLOOKUP haben Leistungsprobleme und sollten wirklich niemals verwendet werden.
Array-Funktionen haben viel Overhead und können auch Leistungsprobleme verursachen. Daher sollten sie nur als letztes Mittel verwendet werden.
COUNT und COUNTA stoßen auf Probleme, wenn die Daten nicht zusammenhängend nicht leer sind, dh Sie haben Leerzeichen und dann wieder Daten in dem fraglichen Bereich
INDIRECT ist volatil und sollte daher nur als letztes Mittel eingesetzt werden
OFFSET ist volatil und sollte daher nur als letztes Mittel eingesetzt werden
Verweise auf die letzte mögliche Zeile oder Spalte (z. B. die 65536. Zeile in Excel 2003) sind nicht robust und führen zu zusätzlichem Overhead
Das benutze ich
wenn der Datentyp gemischt ist:
=max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
wenn bekannt ist, dass die Daten nur Zahlen enthalten:
=MATCH(1E+306,[RANGE],1)
wenn bekannt ist, dass die Daten nur Text enthalten:
=MATCH("*",[RANGE],-1)
MATCH hat den geringsten Overhead und ist nicht flüchtig. Wenn Sie also mit vielen Daten arbeiten, ist dies die beste Verwendung.
quelle
TRUE
/FALSE
) vorhanden sind, werden diese nicht erkannt. Trotz der Tatsache, dass diese Antwort nicht kugelsicher ist, denke ich immer noch, dass diese Antwort den geringsten Einfluss auf die Leistung hat.=INDEX(N:N,MATCH(1E+306,N:N,1))
Dies funktioniert in Excel 2003 (und später mit geringfügigen Änderungen, siehe unten). Drücken Sie Strg + Umschalt + Eingabetaste (nicht nur die Eingabetaste), um dies als Array-Formel einzugeben.
Beachten Sie, dass Excel 2003 keine Array-Formel auf eine gesamte Spalte anwenden kann. Dies ergibt
#NUM!
; Es können unvorhersehbare Ergebnisse auftreten! (EDIT : Widersprüchliche Informationen von Microsoft: Der gleichen Mai oder möglicherweise nicht über Excel 2007 wahr sein; Problem kann im Jahr 2010 festgelegt wurde )Aus diesem Grund wende ich die Array-Formel auf den Bereich an
A1:A65535
und behandle die letzte Zelle, die sichA65536
in Excel 2003 befindet, speziell . Kann nicht einfach sagenA:A
oder sogar,A1:A65536
wenn letztere automatisch zurückkehrtA:A
.Wenn Sie absolut sicher
A65536
sind, dass es leer ist, können Sie denIF
Teil überspringen :Beachten Sie, dass bei Verwendung von Excel 2007 oder 2010 die letzte Zeilennummer 1048576 und nicht 65536 lautet. Passen Sie daher die obigen Angaben entsprechend an.
Wenn sich in der Mitte Ihrer Daten keine leeren Zellen befinden, würde ich einfach die einfachere Formel verwenden
=INDEX(A:A,COUNTA(A:A))
.quelle
=INDEX(19:19,COUNTA(19:19))
Eine alternative Lösung ohne Array-Formeln, die möglicherweise robuster ist als die einer vorherigen Antwort mit einer (Hinweis auf eine) Lösung ohne Array-Formeln , ist
Sehen Sie diese Antwort als Beispiel. Ein großes Lob an Brad und Barry Houdini , die bei der Lösung dieser Frage geholfen haben .
Mögliche Gründe für die Bevorzugung einer Nicht-Array-Formel sind angegeben in:
Eine offizielle Microsoft-Seite (suchen Sie nach "Nachteile der Verwendung von Array-Formeln").
Array-Formeln können magisch erscheinen, haben aber auch einige Nachteile:
Array-Formel-Häresie .
quelle
A
Vorkommen durch a ersetztD
. Was mache ich falsch?Wenn Sie in Spalte (A) suchen, verwenden Sie:
Wenn Ihr Bereich A1: A10 ist, können Sie Folgendes verwenden:
in dieser Formel:
Gibt die letzte nicht leere Zeilennummer zurück und indirekt () gibt den Zellenwert zurück.
quelle
=INDEX(A:A, COUNTA(A:A), 1)
von hier genommenquelle
=MATCH("*";A1:A10;-1)
für Textdaten=MATCH(0;A1:A10;-1)
für numerische Datenquelle
Ich habe alle nichtflüchtigen Versionen ausprobiert, aber nicht eine der oben angegebenen Versionen hat funktioniert. Excel 2003 / 2007update. Dies kann sicherlich in Excel 2003 erfolgen. Weder als Array noch als Standardformel. Ich erhalte entweder nur einen leeren 0- oder # Wertfehler. Also greife ich auf die flüchtigen Methoden zurück. Das hat funktioniert.
@ Julian Kroné .. Mit ";" statt "," funktioniert NICHT! Ich denke, Sie verwenden Libre Office nicht MS Excel? LOOKUP ist so ärgerlich flüchtig, dass ich es nur als letzten Ausweg benutze
quelle
Platzieren Sie diesen Code in einem VBA-Modul. Sparen. Suchen Sie unter Funktionen nach Benutzerdefiniert nach Diese Funktion.
quelle
für Textdaten:
für numerische Daten:
Dies gibt Ihnen den relativen Index der letzten nicht leeren Zelle im ausgewählten Bereich (hier A1: A10).
Wenn Sie den Wert erhalten möchten, greifen Sie über INDIRECT darauf zu, nachdem Sie die absolute Zellreferenz textuell erstellt haben, z.
quelle
Ich hatte auch das gleiche Problem. Diese Formel funktioniert auch gleich gut: -
14 ist die Zeilennummer der ersten Zeile in den Zeilen, die Sie zählen möchten.
Chronischer Klauenzahn
quelle
Ich habe HLOOKUP benutzt
A1
hat ein Datum;A2:A8
hat Prognosen zu unterschiedlichen Zeiten erfasst, ich möchte die neuestenDies verwendet eine Standard-Hlookup-Formel, wobei das Lookup-Array durch die Anzahl der Einträge definiert wird.
quelle
Wenn Sie wissen, dass es dazwischen keine leeren Zellen geben wird, ist dies der schnellste Weg.
Es zählt nur die nicht leeren Zellen und verweist auf die entsprechende Zelle.
Es kann auch für einen bestimmten Bereich verwendet werden.
Dies gibt die letzte nicht leere Zelle im Bereich O4: O34 zurück.
quelle
Für Microsoft Office 2013
"Vorletzter" einer nicht leeren Zeile:
"Letzte" nicht leere Zeile:
quelle
Diese Formel hat bei mir für Office 2010 funktioniert:
= LOOKUP (2; 1 / (A1: A100 ""); A1: A100)
A1: die erste Zelle A100: Beziehen Sie sich beim Vergleich auf die letzte Zelle
quelle
Ich denke, die Antwort von W5ALIVE kommt der am nächsten, mit der ich die letzte Datenzeile in einer Spalte finde. Angenommen, ich suche nach der letzten Zeile mit Daten in Spalte A, würde ich für die allgemeinere Suche Folgendes verwenden:
Das erste MATCH findet die letzte Textzelle und das zweite MATCH findet die letzte numerische Zelle. Die IFERROR-Funktion gibt Null zurück, wenn der erste MATCH alle numerischen Zellen findet oder wenn die zweite Übereinstimmung alle Textzellen findet.
Grundsätzlich ist dies eine geringfügige Variation der gemischten Text- und Zahlenlösung von W5ALIVE.
Beim Testen des Timings war dies signifikant schneller als die entsprechenden LOOKUP-Variationen.
Um den tatsächlichen Wert dieser letzten Zelle zurückzugeben, bevorzuge ich die indirekte Zellreferenzierung wie folgt:
Die von sancho.s angebotene Methode ist vielleicht eine sauberere Option, aber ich würde den Teil, der die Zeilennummer findet, dahingehend ändern:
Der einzige Unterschied besteht darin, dass ", 1" den ersten Wert zurückgibt, während ", 0" das gesamte Wertearray zurückgibt (alle bis auf einen werden nicht benötigt). Ich tendiere immer noch dazu, die Zelle dort an die Indexfunktion zu adressieren, mit anderen Worten, den Zellenwert zurückzugeben mit:
Toller Thread!
quelle
Wenn Sie keine Angst haben, Arrays zu verwenden, ist das Folgende eine sehr einfache Formel, um das Problem zu lösen:
= SUMME (IF (A: A <> "", 1,0))
Sie müssen STRG + UMSCHALT + EINGABETASTE drücken, da dies eine Arrayformel ist.
quelle
Eine einfache, die für mich funktioniert:
quelle
Okay, ich hatte das gleiche Problem wie der Fragesteller und versuchte beide Top-Antworten. Aber nur Formelfehler bekommen. Es stellte sich heraus, dass ich das "," gegen ";" damit die Formeln funktionieren. Ich benutze XL 2007.
Beispiel:
oder
quelle
Für die Versionsverfolgung (Hinzufügen des Buchstabens v am Anfang der Nummer) fand ich, dass dieser in Xcelsius (SAP Dashboards) gut funktioniert.
quelle