Listen mit VBA effizient auswerten
Große Datenmengen auswerten ist Alltag in Excel. Wenn Standardfunktionen nicht reichen, hilft oft ein VBA-Programm, wiederkehrende Aufgaben eleganter und schneller zu lösen — mit typischen Herausforderungen.
Eine Liste mit Daten wird regelmässig aus einer Datenbank heruntergeladen und in eine Excel-Arbeitsmappe importiert. Mit Hilfe einer For-Next-Schleife in Verbindung mit dem Cells-Objekt kann eine solche Liste in VBA sehr effizient ausgewertet werden.
Der Umfang dieser Daten schwankt je nach Geschäftsverlauf, wirft aber regelmässig die Frage auf: Wie lang ist die Liste diesmal? Es geht also darum, die letzte Zeile der Liste zu finden.
1. Letzte Zeile vom Anfang her ermitteln
Definiere den Anfang der Liste (am besten eine Zelle in der Überschrift) und verwende dann die END-Eigenschaft.
Die Angabe «xlDown» gibt die Suchrichtung vor, in der die letzte Zeile gesucht werden soll. Dies funktioniert basierend auf dem ausgewählten Range, in jede Richtung.
Wenn du wissen möchtest, wie viele Spalten deine Liste hat, verwende entsprechend
Achtung:
Dies funktioniert nur, wenn die als Startpunkt angegebene Spalte (im Beispiel Spalte A) keine leeren Zellen enthält. Du kannst den Vorgang jedoch von jeder Spalte aus starten; in den meisten Fällen gibt es mindestens eine Spalte, die keine leeren Zellen enthält.
2. Letzte Zeile vom Ende her ermitteln
gibt die Anzahl der Zeilen in deinem Arbeitsblatt an, im XLSX- oder XLSM-Dateiformat sind dies 1048576. Du musst also ab dieser Zeile nach oben suchen, indem du wieder die END-Eigenschaft verwendest.
«Cells(Rows.Count, 1)» definiert die letzte Zelle des Arbeitsblatts in der 1. Spalte (Spalte «A»).
3. Letzte Zeile einer Tabelle ermitteln
Eine Tabelle wird von Excel (und damit auch von VBA) grundsätzlich «als Ganzes» betrachtet. Wenn deine Liste also als Tabelle formatiert ist, brauchst du dir keine Gedanken über leere Zeilen zu machen; auch diese werden gezählt.
Gib deiner Tabelle einen Namen. Dieser Name wird in VBA über die Eigenschaft «ListObjects» referenziert.
.