(letzte) benutzte Zeilen - Spalten finden
markierter Bereich: erste und letzte Zelle finden
Adressen eines markierten Bereichs auslesen
Das ist ein ewiges Thema in Excel-VBA: Das Auffinden der
letzten benutzten Zeile oder Spalte in Excel. Es gibt mehrere
Lösungsansätze, die je nach Art der Daten in der Tabelle,
der Grösse der gesamten Tabelle, oder der Tabellenstruktur
eingesetzt werden. Der Anwender muss im jeweiligen Falle
selber entscheiden, wieviel Aufwand nötig ist. Den optimalen
Universalcode, für alle Fälle gleich einsetzbar, gibt es nicht.
Zum Beispiel enthalten scheinbar leere Zellen manchmal doch Daten oder
leere Strings, weshalb dann der eine oder andere Code nicht
das gewünschte Ergebnis liefert.
Sub letzte_Zeile()
'letzte benutzte Zelle in Spalte 3 finden
DIM Ende As Long
With ActiveSheet
Ende = .Cells(Rows.Count, 3).End(xlUp).Row
End With
'Dein Code....
End Sub
Sub letzte_Zeile()
DIM Ende As Long
Ende = UsedRange.Rows.Count
End Sub
Sub letzte_Spalte()
DIM Ende As Long
Ende = UsedRange.Columns.Count
End Sub
Sub letzte_Zeile()
DIM Ende As Long
Ende = 0
Do Until Cells(Ende + 1, 1) = ""
Ende = Ende + 1
Loop
End Sub
Sub letzte_Zeile()
DIM Ende As Long
Ende = 0
Do Until IsEmpty(Cells(Ende + 1, 1))
Ende = Ende + 1
Loop
End Sub
Sub letzte_Zeile()
DIM Ende As Long
Ende = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
End Sub
Sub letzte_Spalte()
DIM Ende As Long
Ende = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
End Sub
Das folgende Beispiel ist interessant, denn es liefert das gleiche
Ergebnis, wie das vorherige Makro. Obwohl hier explizit A:A
angegeben wird, liefert xlCellTypeLastCell die letzte Zelle
des gesamten Blattes und nicht die letzte Zelle der angegebenen
Spalte. Jedoch benötigt man hier ActiveSheet.Cells nicht.
Sub letzte_Zeile()
DIM Ende As Long
Ende = Range("A:A").SpecialCells(xlCellTypeLastCell).Row
End Sub
Auch eine Möglichkeit, wenn man nicht ganz sicher ist
dass VBA die gwünschte Zelle richtig findet.
Man markiert die letzte (gewünschte) Zelle und lässt VBA
die Adresse (als String) auslesen.
Oder man Markiert einen ganzen Bereich und lässt sich diese
Adresse auslesen.
Diese Adresse, in einer Variablen gespeichert ( hier "s" ),
lässt sich äusserst bequem auf das Range-Objekt anwenden.
Siehe folgendes Beispiel:
Sub Adressen_auslesen()
Dim EZ As Integer ' Nummer der ersten Zeile
Dim LZ As Integer ' Nummer der letzten Zeile
Dim ES As String ' Nummer der ersten Spalte
Dim LS As String ' Nummer der letzten Spalte
Dim s As String ' Adresse des markierten Bereichs
Dim x As String ' Adresse der letzten Zelle im markierten Bereich
s = Selection.Address
EZ = Range(s).Row
MsgBox ("Erste Zeile = " & EZ)
LZ = Range(s).Row + Range(s).Rows.Count - 1
MsgBox ("letzte Zeile = " & LZ)
ES = Range(s).Column
MsgBox ("erste Spalte = " & ES)
LS = Range(s).Column + Range(s).Columns.Count - 1
MsgBox ("letzte Spalte = " & LS)
MsgBox ("selktierte Adresse = " & s)
x = Selection(Selection.Count).Address
MsgBox ("letzte Zelle im" & Chr(13) & "markierten Bereich = " & Chr(13) & x)
End Sub