Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Gefährlicher Code Letzte Zeile/Zelle

Gefährlicher Code Letzte Zeile/Zelle
04.08.2004 23:21:25
Klaus
Hallo Forum,
habe mal eine grundsätzliche Frage zu einem Code. Folgenden Code habe ich benutzt, um die Zeilennummer der letzten Zelle mit vorhandenen Daten zu ermitteln:

Sub LetzteZelle()
LetzteZelle = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Row
End Sub

Allerdings musste ich bei mir feststellen, das der Code nicht mehr wie gewünscht funktioniert, wenn ich in dem Datenbereich einen Filter setze. Der Code zeigt mir dann nicht mehr die letzte Zelle des KOMPLETTEN Datenbereichs, sondern nur noch die letzte Zelle des GEFILTERTEN Bereichs an.
Meine Frage: Habe ich einen Fehler bei mir im System oder kann man diesen Code halt nur in einem bestimmten Bereich benutzen ?
Wenn letzteres zutreffen sollte, so suggerieren viele Internetseiten halt was anderes, nämlich dass man IMMER die letzte Zelle des GANZEN Datenbereichs ermittelt.
Kann sich hierzu vielleicht jemand grundsätzlich äußern ?
Kann man diesen Code bewusst dazu benutzen, die letzte, gefilterte Zeile zu ermitteln ?
Nachdem ich mir leider ungewollt mit dem oberen Code einige Einträge überschrieben habe, benutze ich mittlerweile folgende Variationen, da die sich offensichtlich nicht an einen gefilterten Bereich stören, :

Sub LetzteZelle()
LetzteZeile = ActiveSheet.UsedRange.Rows.Count
'oder
LetzteZeile = ActiveSheet.Range("A65536").End(xlUp).Row
'oder
LetzteZeile = ActiveSheet.Cells(65536, 1).End(xlUp).Row
End Sub

Vielen Dank für Antworten
Gruß Klaus
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gefährlicher Code Letzte Zeile/Zelle
Boris
Hi Klaus,
auch deine Variationen sind Murks:
LetzteZeile = ActiveSheet.UsedRange.Rows.Count
Der UsedRange ist ein dermaßen unsicherer und bescheidener Kandidat, dass ich auf ihn so gut wie immer verzichten würde.
LetzteZeile = ActiveSheet.Range("A65536").End(xlUp).Row
'oder
LetzteZeile = ActiveSheet.Cells(65536, 1).End(xlUp).Row

Funkdioniert analog
ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Row
Berücksichtigt werden immer nur sichtbare Zellen.
Alternativ:
Wenn es sich um Text handelt, dann ist relativ flott:

Sub letzte()
MsgBox WorksheetFunction.Match("", [a:a], -1)
End Sub

Für Zahlen:

Sub letzte()
MsgBox WorksheetFunction.Match(-1E+307, [a:a], -1)
End Sub

Grüße Boris
Anzeige
AW: Gefährlicher Code Letzte Zeile/Zelle
05.08.2004 00:07:12
Klaus
Hallo Boris,
vielen Dank für deine Antwort.
Hab mir beim Antesten der unteren Variationen offensichtlich selbst ein Bein gestellt, habe beim Nachtesten festgestellt,dass du natürlich recht hast.
Die Variationen
LetzteZeile = ActiveSheet.Range("A65536").End(xlUp).Row
und
LetzteZeile = ActiveSheet.Cells(65536, 1).End(xlUp).Row
kommen natürlich auch zu dem "falschen" Ergebnis,
sie sind ja auch im Prinzip das gleiche wie
LetzteZelle = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Row
Danke auch für deine Vorschläge, die Excel-Funktionen sind halt wahrscheinlich das Beste. Kannst du mir vielleicht noch sagen, warum die Variation
LetzteZeile = ActiveSheet.UsedRange.Rows.Count
so unsicher ist, zumal ich diese Version in verschiedenen Excel-Büchern gesehen habe ?
Gruß Klaus
Anzeige
Nachfrage erledigt !
05.08.2004 00:17:07
Klaus
Hallo Boris,
durch die Antwort von K.Rola hat sich meine Nachfrage bezüglich UsedRange erledigt!
Vielen Dank nochmal
Gruß Klaus
AW: Gefährlicher Code Letzte Zeile/Zelle
K.Rola
Hallo,
gib mal in einem jungfräulichen Blatt in D10 und F20 was ein und teste:
ActiveSheet.UsedRange.Select
MsgBox ActiveSheet.UsedRange.Rows.Count
Alles klar?
Der Rest, siehe {Boris}
Gruß K.Rola
Anzeige
AW: Gefährlicher Code Letzte Zeile/Zelle
05.08.2004 00:14:33
Klaus
Hallo K.Rola,
damit hat sich meine Nachfrage weiter oben dann wohl erledigt, vielen Dank !
Habe dieses Problem noch nicht gehabt, da ich bisher immer zusammenhängende, durchformatierte Datenbereiche hatte, wo UsedRange meines Wissens wohl funktioniert.
Werde dann mal auf die neu gewonnenen Erkenntnisse umsteigen :-))
Gruß Klaus
Anzeige
Stopp...
K.Rola
Hallo,
Boris hat völlig Recht, Usedrange ist ein unsicherer Kandidat. Meist wird er nur dann aktualisiert, wenn die Datei gespeichert wurde und selbst dann kann man sich nicht 100%
darauf verlassen. Besser nicht verwenden oder nur dann, wenn kein Schaden zu erwarten ist.
Gruß K.Rola
Anzeige
AW: Stopp...
05.08.2004 00:32:51
Klaus
Hallo K.Rola,
hab's kapiert,werde ich ändern. Zusätzlich habe ich mir derzeit noch 'ne Prüfung eingebaut die verhindert, dass nochmal versehentlich was überschrieben wird.
Tja, da meint man jahrelang, es ist alles in Ordnung und plötzlich wird man doch eines Besseren belehrt !
Vielen Dank nochmal !
Gruß Klaus
Anzeige
Zusatz
Ramses
Hallo Klaus
UsedRange bezieht sich auf ALLES was in einem Worksheet EINGEFÜGT oder FORMATIERT wurde.
Schreib mal in A1 "1"
Formatiere die Zelle k1000 mit der Schriftart weiss, Sonst nichts reinschreiben, und schau mal was UsedRange.Select nun macht :-)
Deshalb ist die Anweisung, Bücher hin oder her, für den normalen Gebrauch unbrauchbar.
Das geht sogar soweit, dass wenn du in X10000 was reinschreibst und wieder löscht,... der UsedRange nun eben bis zu dieser Zelle geht.
Gruss Rainer
Anzeige
AW: Zusatz
07.08.2004 14:11:42
Klaus
Hallo Rainer,
vielen Dank auch dir für deinen Hinweis.
Du hast recht! Genau das, was du beschreibst, habe ich gearde durch meine eingebaute Prüfroutine bemerkt!
Ich werde UsedRange nicht mehr benutzen !!!
Gruß Klaus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Letzte Zelle in Excel ermitteln: Tipps und Tricks


Schritt-für-Schritt-Anleitung

Um die letzte Zelle in einem Excel-Arbeitsblatt zu ermitteln, kannst du den folgenden VBA-Code verwenden. Dieser Code funktioniert in verschiedenen Excel-Versionen:

Sub LetzteZelle()
    LetzteZelle = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Wähle Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den obigen Code in das Modul.
  4. Schließe den VBA-Editor und kehre zurück zu Excel.
  5. Führe das Makro LetzteZelle aus, um die Zeilennummer der letzten Zelle mit Daten zu ermitteln.

Beachte, dass dieser Code nur in nicht gefilterten Bereichen die korrekte Zeile zurückgibt.


Häufige Fehler und Lösungen

Ein häufiger Fehler beim Arbeiten mit dem Code ist, dass er nicht die letzte Zelle für den gesamten Datenbereich zurückgibt, wenn ein Filter angewendet ist. Stattdessen zeigt er nur die letzte Zeile des gefilterten Bereichs an. Um dies zu vermeiden, sollte man:

  • Den Code nicht in gefilterten Bereichen verwenden.
  • Alternativen wie ActiveSheet.UsedRange.Rows.Count vermeiden, da dieser Befehl unsicher ist und nicht immer die erwarteten Ergebnisse liefert.

Wenn du die letzte Zelle in einem gefilterten Bereich ermitteln musst, kannst du den folgenden Code verwenden:

Sub LetzteZelleGefiltert()
    LetzteZelle = ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Rows.Count
End Sub

Alternative Methoden

Es gibt verschiedene Methoden, um die letzte Zeile zu finden, beispielsweise:

  1. Mit der MATCH-Funktion:

    • Für Text:
      MsgBox WorksheetFunction.Match("", [A:A], -1)
    • Für Zahlen:
      MsgBox WorksheetFunction.Match(-1E+307, [A:A], -1)
  2. Verwendung von UsedRange:

    • Auch wenn UsedRange unsicher ist, kannst du ihn wie folgt verwenden:
      LetzteZelle = ActiveSheet.UsedRange.Rows.Count

Beachte jedoch, dass UsedRange nicht immer die aktuellen Daten widerspiegelt, insbesondere wenn Zellen gelöscht oder formatiert wurden.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die letzte Zelle ermitteln kannst:

  1. Letzte Zelle in Spalte A:

    Sub LetzteZelleSpalteA()
       MsgBox ActiveSheet.Range("A65536").End(xlUp).Row
    End Sub
  2. Ermittlung der letzten Zelle in einem gefilterten Bereich:

    Sub LetzteZelleGefiltert()
       MsgBox ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).End(xlUp).Row
    End Sub

Diese Beispiele zeigen, wie du verschiedene Ansätze nutzen kannst, um die letzte Zelle zu ermitteln.


Tipps für Profis

  • Vermeide die Verwendung von UsedRange, wenn du nicht sicher bist, dass die Daten aktuell sind.
  • Nutze die SpecialCells-Methode, um nur sichtbare Zellen zu berücksichtigen, insbesondere in gefilterten Daten.
  • Implementiere Prüfungen, um versehentliche Überschreibungen zu vermeiden, wenn du mit großen Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Warum funktioniert UsedRange nicht zuverlässig?
UsedRange aktualisiert sich nicht immer automatisch, besonders wenn Zellen gelöscht oder formatiert werden. Es kann daher zu unerwarteten Ergebnissen führen.

2. Wie finde ich die letzte Zelle in einer gefilterten Tabelle?
Verwende ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).End(xlUp).Row, um die letzte sichtbare Zelle in einem gefilterten Bereich zu ermitteln.

3. Gibt es einen Unterschied zwischen Cells und Range?
Ja, Cells bezieht sich auf alle Zellen in einem Arbeitsblatt, während Range spezifische Zellen oder Zellbereiche adressiert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige