it-swarm.com.de

Letzte nicht leere Zelle in einer Spalte

Kennt jemand die Formel, um den Wert der letzten nicht leeren Zelle in einer Spalte in Microsoft Excel zu ermitteln?

101
MichaelS

Dies funktioniert sowohl mit Text als auch mit Zahlen und kümmert sich nicht darum, ob leere Zellen vorhanden sind, d. H., Es wird die letzte nicht leere Zelle zurückgegeben.

Es muss ein Array eingegeben werden das bedeutet, dass Sie drücken Sie Strg-Umschalt-Eingabe nach Sie geben es ein oder fügen es ein. Das Folgende ist für Spalte A:

=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
70
Doug Glancy

Die Verwendung der einfachen Formel ist viel schneller

=LOOKUP(2,1/(A:A<>""),A:A)

Für Excel 2003:

=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)

Sie haben folgende Vorteile:

  • es ist nicht Array Formel
  • es ist nicht flüchtige Formel

Erklärung:

  • (A:A<>"") gibt Array {TRUE,TRUE,..,FALSE,..} zurück 
  • 1/(A:A<>"") ändert dieses Array in {1,1,..,#DIV/0!,..}
  • Da LOOKUPsortiert array in der Reihenfolge aufsteigend erwartet, und unter Berücksichtigung der Tatsache, dass die LOOKUP-Funktion keine exakte Übereinstimmung findet, wählt sie den größten Wert im lookup_range ( In unserem Fall {1,1,..,#DIV/0!,..}), der kleiner oder gleich dem Wert ist (in unserem Fall 2), findet die Formel den letzten 1 im Array und gibt den entsprechenden Wert aus result_range (dritter Parameter - A:A) zurück. 

Auch kleiner Hinweis - obige Formel berücksichtigt fehlerhafte Zellen nicht (Sie können dies nur sehen, wenn die letzte nicht leere Zelle einen Fehler aufweist). Wenn Sie sie berücksichtigen möchten, verwenden Sie:

=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)

bild unten zeigt den Unterschied:

enter image description here

118
Dmitry Pavliv

Hier ist eine weitere Option: =OFFSET($A$1;COUNTA(A:A)-1;0)

23
Patrick Honorez

Inspiriert durch die großartige Antwort, die Doug Glancy gegeben hat, hatte ich einen Weg gefunden, das Gleiche zu tun, ohne eine Array-Formel zu benötigen. Fragen Sie mich nicht nach dem Grund, aber ich möchte die Verwendung von Arrayformeln möglichst vermeiden (nicht aus irgendeinem bestimmten Grund, es ist nur mein Stil). 

Hier ist es: 

=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))

Zum Finden der letzten nicht leeren Zeile mit Spalte A als Referenzspalte

=SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1))))

Zum Finden der letzten nicht leeren Spalte unter Verwendung von Zeile 1 als Referenzzeile

Dies kann in Verbindung mit der Indexfunktion weiter verwendet werden, um dynamisch benannte Bereiche effizient zu definieren. Dies ist jedoch etwas für einen anderen Beitrag, da dies nicht mit der hier behandelten 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 brauchen Sie keine Strg-Taste + Umschalttaste + Eingabetaste auszuführen. Indem wir die Funktionsweise von sumproduct in Excel nutzen, können wir uns mit der Notwendigkeit befassen, Array-Operationen durchzuführen, jedoch ohne Array-Formel. Ich hoffe, dass jemand da draußen die Schönheit, Schlichtheit und Eleganz dieser vorgeschlagenen Produktlösungen schätzen kann, genauso wie ich. Ich bezeuge jedoch nicht die Speichereffizienz der oben genannten Lösungen. Sie sind einfach, sehen schön aus, helfen dem beabsichtigten Zweck und sind flexibel genug, um ihre Verwendung auf andere Zwecke auszudehnen :)

Hoffe das hilft!

Alles Gute!

14
Santiago

Dies funktioniert in Excel 2003 (und später mit geringfügiger Bearbeitung, siehe unten). Drücken Sie Strg + Umschalt + Eingabetaste (nicht nur Eingabetaste), um dies als Matrixformel einzugeben.

=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)

Beachten Sie, dass Excel 2003 nicht möglich ist, um eine Array-Formel auf eine gesamte Spalte anzuwenden. Dies ergibt #NUM!; unvorhersehbare Ergebnisse können auftreten! (EDIT : Widersprüchliche Informationen von Microsoft: Dasselbe kann oder kann nicht gilt für Excel 2007; Problem kann wurde 2010 behoben. )

Aus diesem Grund wende ich die Matrixformel auf den Bereich A1:A65535 an und behandle die letzte Zelle, die in Excel 2003 A65536 ist, speziell. Ich kann nicht einfach A:A oder sogar A1:A65536 sagen, da diese automatisch zu A:A zurückkehrt.

Wenn Sie absolut sicher sind, dass A65536 leer ist, können Sie den Teil IF überspringen:

=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))

Beachten Sie, dass bei Verwendung von Excel 2007 oder 2010 die letzte Zeilennummer 1048576 und nicht 65536 lautet. Passen Sie die obigen Angaben entsprechend an.

Wenn sich in der Mitte Ihrer Daten keine leeren Zellen befinden, würde ich einfach die einfachere Formel =INDEX(A:A,COUNTA(A:A)) verwenden.

Ich weiß, dass diese Frage alt ist, aber ich bin mit den Antworten nicht zufrieden.

  • LOOKUP, VLOOKUP und HLOOKUP haben Leistungsprobleme und sollten niemals verwendet werden. 

  • Array-Funktionen haben viel Overhead und können auch zu Leistungsproblemen führen. Sie sollten daher nur als letzter Ausweg verwendet werden. 

  • COUNT und COUNTA haben Probleme, wenn die Daten nicht zusammenhängend nicht leer sind, d. H. Sie haben Leerzeichen und dann wieder Daten in dem fraglichen Bereich

  • INDIRECT ist volatil und sollte daher nur als letztes Mittel verwendet werden

  • OFFSET ist flüchtig und sollte daher nur als letztes Mittel verwendet werden

  • verweise auf die letzte mögliche Zeile oder Spalte (z. B. die 65536-te Zeile in Excel 2003) sind nicht robust und führen zu zusätzlichem Aufwand

Das ist was ich benutze

  • 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 am besten zu verwenden.

10
W5ALIVE

Eine alternative Lösung ohne Arrayformeln, möglicherweise robuster als die von eine vorherige Antwort mit einem (Hinweis auf eine Lösung) ohne Arrayformeln , ist

=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))

Siehe diese Antwort als Beispiel. _. Kudos an Brad und barry houdini , der half, diese Frage zu lösen.

Mögliche Gründe für die Bevorzugung einer Nicht-Array-Formel finden Sie in:

  1. Eine offizielle Microsoft-Seite (Suchen Sie nach "Nachteile bei der Verwendung von Array-Formeln") .
    Array-Formeln können magisch erscheinen, sie haben jedoch auch einige Nachteile:

    • Sie können gelegentlich vergessen, STRG + UMSCHALT + EINGABETASTE zu drücken. Denken Sie daran, diese Tastenkombination zu drücken, wenn Sie eine Arrayformel eingeben oder bearbeiten.
    • Andere Benutzer verstehen Ihre Formeln möglicherweise nicht. Array-Formeln sind relativ undokumentiert. Wenn also andere Personen Ihre Arbeitsmappen ändern müssen, sollten Sie entweder Array-Formeln vermeiden oder sicherstellen, dass diese Benutzer verstehen, wie sie geändert werden.
    • Abhängig von der Verarbeitungsgeschwindigkeit und dem Arbeitsspeicher Ihres Computers können große Arrayformeln die Berechnungen verlangsamen.
  2. Array Formula Heresy .

7
sancho.s

=INDEX(A:A, COUNTA(A:A), 1) aus hier entnommen

2
HattrickNZ

=MATCH("*";A1:A10;-1) für Textdaten

=MATCH(0;A1:A10;-1) für numerische Daten

2
liharvi

Ich habe alle nichtflüchtigen Versionen ausprobiert, aber keine der oben angegebenen Versionen hat funktioniert. Excel 2003/2007update. Sicherlich kann dies in Excel 2003 durchgeführt werden. Nicht als Array oder als Standardformel Ich greife auf die flüchtigen Methoden zurück. 

= LOOKUP (2,1/(T4: T369 <> ""), T4: T369)

@Julian Kroné .. Verwenden von ";" statt "," funktioniert NICHT! Ich denke, Sie verwenden Libre Office nicht MS Excel? LOOKUP ist so nervig, dass ich es nur als letzten Ausweg benutze

1
remote one

wenn Sie in Spalte (A) suchen, verwenden Sie:

=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))

wenn Ihr Bereich A1: A10 ist, können Sie Folgendes verwenden:

=INDIRECT("A" & SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10)))))

in dieser Formel:

SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10))))

gibt die letzte nicht leere Zeilennummer zurück und indirekte () gibt den Zellenwert zurück.

1
Sharif Lotfi

für Textdaten: 

EQUIV("";A1:A10;-1)

für numerische Daten: 

EQUIV(0;A1:A10;-1)

Damit erhalten Sie 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 erstellt haben, z. B. 

INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))
0
Adel

Ich denke, die Antwort von W5ALIVE kommt am nächsten an dem, was ich verwende, um die letzte Datenzeile in einer Spalte zu finden. Vorausgesetzt, ich suche nach der letzten Zeile mit Daten in Spalte A, würde ich jedoch Folgendes für die generische Suche verwenden:

=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))

Der erste MATCH sucht die letzte Textzelle und der zweite MATCH findet die letzte numerische Zelle. Die IFERROR-Funktion gibt Null zurück, wenn der erste MATCH alle numerischen Zellen oder der zweite Treffer alle Textzellen findet.

Grundsätzlich ist dies eine leichte Variation der W5ALIVE-Lösung für gemischte Texte und Zahlen. 

Beim Testen des Timings war dies wesentlich schneller als die entsprechenden LOOKUP-Varianten.

Um den tatsächlichen Wert der letzten Zelle zurückzugeben, verwende ich die indirekte Zellenreferenzierung wie folgt:

=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))

Die von sancho.s angebotene Methode ist vielleicht eine sauberere Option, aber ich würde den Teil, der die Zeilennummer findet, folgendermaßen ändern:

=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)

der einzige Unterschied besteht darin, dass "1" den ersten Wert zurückgibt, während "0" das gesamte Array von Werten zurückgibt (alle bis auf einen werden nicht benötigt). Ich ziehe immer noch vor, die Zelle an die Indexfunktion zu richten, mit anderen Worten, den Zellenwert mit:

=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))

Toller Thread!

0
FocusWiz

Fügen Sie diesen Code in ein VBA-Modul ein. Sparen. Suchen Sie unter Funktionen Benutzerdefiniert nach Diese Funktion.

Function LastNonBlankCell(Range As Excel.Range) As Variant
    Application.Volatile
    LastNonBlankCell = Range.End(xlDown).Value
End Function
0

Ich habe HLOOKUP benutzt

A1 hat ein Datum; A2:A8 hat Vorhersagen zu unterschiedlichen Zeitpunkten gemacht, ich möchte die neuesten

=Hlookup(a1,a1:a8,count(a2:a8)+1)

Hierbei wird eine Standardformel mit dem Lookup-Array verwendet, die durch die Anzahl der Einträge definiert wird.

0
Chris

Wenn Sie keine Angst vor der Verwendung von Arrays haben, können Sie das Problem mit einer sehr einfachen Formel lösen:

= SUMME (WENN (A: A <> "", 1,0))

Sie müssen STRG + UMSCHALT + EINGABETASTE drücken, da dies eine Matrixformel ist.

0
Bits_of_guy

Wenn Sie wissen, dass es keine leeren Zellen dazwischen gibt, ist dies der schnellste Weg. 

=INDIRECT("O"&(COUNT(O:O,"<>""")))

Es zählt nur die nicht leeren Zellen und verweist auf die entsprechende Zelle.

Es kann auch für einen bestimmten Bereich verwendet werden.

=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))

Dies gibt die letzte nicht leere Zelle im Bereich O4: O34 zurück.

0
Tassos Mallis

Diese Formel hat mit mir für das Amt 2010 zusammengearbeitet:

= LOOKUP (2; 1/(A1: A100 <""); A1: A100)

A1: Die erste Zelle A100: Bezieht sich auf die letzte Zelle beim Vergleichen

0
Wahed

Ich hatte auch das gleiche Problem. Diese Formel funktioniert auch gleich gut: -

=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1))))

14 ist die Zeilennummer der ersten Zeile in der Zeile, die Sie zählen möchten.

Chronischer Klauenzahn

0

Für Microsoft Office 2013

"Letzte" einer nicht leeren Zeile:

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-2,0)

"Letzte" nicht leere Zeile:

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-1,0)
0
aprodan