Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Arbeitsblätter Navigieren | Arbeiten mit Excel-Daten
Excel VBA für Geschäftsautomatisierung

Arbeitsblätter Navigieren

Swipe um das Menü anzuzeigen

Echte Daten haben kein Etikett, das angibt, wo sie enden. Das Hardcodieren von Range("A1:I5") funktioniert nicht mehr, sobald jemand eine sechste Bestellung hinzufügt – daher muss das Arbeitsblatt gefragt werden, wo seine Daten enden.

Ermitteln der letzten Zeile

Die am häufigsten verwendete Codezeile in diesem gesamten Kurs:

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Von rechts nach links lesen: Am unteren Ende der Spalte A beginnen (ws.Rows.Count), nach oben springen (End(xlUp)), bis die erste belegte Zelle erreicht wird, und deren Zeilennummer zurückgeben. Funktioniert unabhängig davon, wie viele Bestellungen vorhanden sind.

Abbildung 3.2

Ermitteln der letzten Spalte

Funktioniert genauso, aber seitlich:

Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

UsedRange

Gibt den gesamten rechteckigen Bereich des Arbeitsblatts an, der jemals Daten enthalten hat – praktisch für eine schnelle Überprüfung, aber mit Vorsicht zu genießen: Es merkt sich Zellen, die früher Daten enthielten, auch nachdem deren Inhalte gelöscht wurden, sodass der tatsächliche Datenbereich überschätzt werden kann.

Debug.Print ws.UsedRange.Address        ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count     ' 6

CurrentRegion

In der Regel das bessere Werkzeug: Erweitert sich von einer einzelnen Zelle aus auf den zusammenhängenden Datenblock, bis zur ersten leeren Zeile oder Spalte – entspricht genau einer sauberen Tabelle wie Orders:

Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address           ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1    ' 5 — subtract 1 to exclude the header

Aufgabe

  1. Ein Sub schreiben, das die letzte Zeile mit der Methode End(xlUp) findet und im Direktfenster ausgibt.
  2. Im selben Sub die letzte Zeile auf eine zweite Weise mit CurrentRegion.Rows.Count ermitteln und ebenfalls ausgeben – überprüfen, ob beide übereinstimmen.
  3. Fügen Sie manuell einen sechsten Auftrag in Zeile 7 des Arbeitsblatts hinzu, führen Sie Ihr Makro erneut aus und bestätigen Sie, dass beide Methoden nun 7 melden, ohne dass der Code geändert wurde:
Hinweis
expand arrow

1. Ermitteln der letzten Zeile mit End(xlUp)

  • Vom untersten Ende der Spalte A nach oben springen — genau das Muster aus Kapitel 3, Abschnitt "Ermitteln der letzten Zeile".
  • Das Ergebnis mit Debug.Print ausgeben, damit es im Direktfenster (Strg+G) angezeigt wird.

2. Zweite Methode mit CurrentRegion

  • CurrentRegion erweitert sich von einer einzelnen Startzelle (z. B. Range("A1")) auf den gesamten zusammenhängenden Block.
  • .Rows.Count für diesen Bereich enthält die Kopfzeile — beachte den Hinweis im Kapitel, dass du 1 abziehen musst, wenn du nur die Datenzeilen möchtest. Da diese Aufgabe nur den Vergleich der beiden Methoden verlangt, gib zunächst die Rohanzahl aus und berücksichtige die Kopfzeile anschließend.

3. Eine sechste Zeile hinzufügen und erneut ausführen

  • Es sind keinerlei Codeänderungen erforderlich — einfach einen neuen Auftrag direkt in Zeile 7 des Arbeitsblatts eingeben und das gleiche Sub erneut ausführen.
Lösung
expand arrow
Sub CompareLastRowMethods()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    Dim lastRowMethod1 As Long
    lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print "End(xlUp): " & lastRowMethod1

    Dim lastRowMethod2 As Long
    lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
    Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 3. Kapitel 2
some-alt