HINWEIS : Ich beabsichtige, dies zu einem "One-Stop-Post" zu machen Correct, auf dem Sie die letzte Zeile finden können. Dies umfasst auch die Best Practices, die beim Auffinden der letzten Zeile zu befolgen sind. Und daher werde ich es weiter aktualisieren, wenn ich auf ein neues Szenario / eine neue Information stoße.
Unzuverlässige Wege, um die letzte Zeile zu finden
Einige der gebräuchlichsten Methoden zum Auffinden der letzten Zeile, die sehr unzuverlässig sind und daher niemals verwendet werden sollten.
- UsedRange
- xlDown
- CountA
UsedRangesollte NIEMALS verwendet werden, um die letzte Zelle mit Daten zu finden. Es ist sehr unzuverlässig. Versuchen Sie dieses Experiment.
Geben Sie etwas in die Zelle ein A5. Wenn Sie nun die letzte Zeile mit einer der unten angegebenen Methoden berechnen, erhalten Sie 5. Färben Sie nun die Zelle A10rot. Wenn Sie jetzt einen der folgenden Codes verwenden, erhalten Sie immer noch 5. Wenn Sie verwenden, Usedrange.Rows.Countwas erhalten Sie? Es wird nicht 5 sein.
Hier ist ein Szenario, um zu zeigen, wie es UsedRangefunktioniert.

xlDown ist ebenso unzuverlässig.
Betrachten Sie diesen Code
lastrow = Range("A1").End(xlDown).Row
Was würde passieren, wenn es nur eine Zelle ( A1) gäbe, die Daten enthält? Am Ende erreichen Sie die letzte Zeile im Arbeitsblatt! Es ist so, als würde man eine Zelle auswählen A1und dann die EndTaste drücken und dann die Down ArrowTaste drücken . Dies führt auch zu unzuverlässigen Ergebnissen, wenn sich leere Zellen in einem Bereich befinden.
CountA ist auch unzuverlässig, da es zu falschen Ergebnissen führt, wenn dazwischen leere Zellen liegen.
Und daher sollte man die Verwendung von vermeiden UsedRange, xlDownund CountAdie letzte Zelle zu finden.
Finde die letzte Zeile in einer Spalte
Verwenden Sie diese Option, um die letzte Zeile in Spalte E zu finden
With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With
Wenn Sie bemerken, dass wir eine .vorher haben Rows.Count. Wir haben das oft ignoriert. Siehe DIESE Frage zu dem möglichen Fehler, den Sie möglicherweise erhalten. Ich rate immer .vor Rows.Countund Columns.Count. Diese Frage ist ein klassisches Szenario, in dem der Code aufgrund der Rows.CountRückgabe 65536für Excel 2003 und früher sowie 1048576für Excel 2007 und höher fehlschlägt . Ebenso Columns.Countgibt 256und 16384, respectively.
Die obige Tatsache, dass Excel 2007+ 1048576Zeilen enthält, unterstreicht auch die Tatsache, dass wir immer die Variable deklarieren sollten, die den Zeilenwert enthält, da Longstattdessen Integereine OverflowFehlermeldung angezeigt wird .
Beachten Sie, dass bei diesem Ansatz alle ausgeblendeten Zeilen übersprungen werden. Im Rückblick auf meinem Screenshot oben für Spalte A , wenn Zeile 8 versteckt waren, würde dieser Ansatz zurückkehrt 5statt 8.
Finde die letzte Reihe in einem Blatt
EffectiveVerwenden Sie diese Option, um die letzte Zeile im Blatt zu finden . Beachten Sie die Verwendung von Application.WorksheetFunction.CountA(.Cells). Dies ist erforderlich, denn wenn das Arbeitsblatt keine Zellen mit Daten enthält .Find, erhalten Sie dieseRun Time Error 91: Object Variable or With block variable not set
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
Letzte Zeile in einer Tabelle suchen (ListObject)
Die gleichen Prinzipien gelten zum Beispiel, um die letzte Zeile in der dritten Spalte einer Tabelle zu erhalten:
Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")
With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
End Sub