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.
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
- Ein
Subschreiben, das die letzte Zeile mit der MethodeEnd(xlUp)findet und im Direktfenster ausgibt. - Im selben
Subdie letzte Zeile auf eine zweite Weise mitCurrentRegion.Rows.Countermitteln und ebenfalls ausgeben – überprüfen, ob beide übereinstimmen. - 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:
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.Printausgeben, damit es im Direktfenster (Strg+G) angezeigt wird.
2. Zweite Methode mit CurrentRegion
CurrentRegionerweitert sich von einer einzelnen Startzelle (z. B.Range("A1")) auf den gesamten zusammenhängenden Block..Rows.Countfü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
Suberneut ausführen.
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
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen