Excel2003 VBA: Range(...).End(xlUp).Row

Hallo zusammen.

Ich muß in meinem Tabellenblatt den Bereich „A1:L1000“ überwachen und immer die unterste Zeile wissen.

Die Zellen der Spalten A bis L werden aber nicht gleichmäßig gefüllt, sodaß ich, würde ich die Spalten einzeln abfragen, immer unterschiedliche Werte erhalten würde.

Überprüfe ich den Bereich wie oben angegeben, dann erhalte ich immer nur die unterste Zeile aus Spalte A, obwohl in den Spalten B bis L schon eine ganz andere Zeile die unterste sein kann.

Gibt es eine Syntax, mit der ich den gesamten Bereich überwachen kann?

Vielen Dank für Eure Hilfe

VG
Carsten

Grüezi Carsten

Ich muß in meinem Tabellenblatt den Bereich „A1:L1000“
überwachen und immer die unterste Zeile wissen.

Die Zellen der Spalten A bis L werden aber nicht gleichmäßig
gefüllt, sodaß ich, würde ich die Spalten einzeln abfragen,
immer unterschiedliche Werte erhalten würde.

Überprüfe ich den Bereich wie oben angegeben, dann erhalte ich
immer nur die unterste Zeile aus Spalte A, obwohl in den
Spalten B bis L schon eine ganz andere Zeile die unterste sein
kann.

Gibt es eine Syntax, mit der ich den gesamten Bereich
überwachen kann?

Du kannst das mit den folgenden Funktionen (die für die letzte Spalte ist auch gleich mit dabei) sehr einfach tun.

Aufgerufen werden die Funktionen z.B. wie folgt:

MsgBox LastRow(ActiveSheet.Range(„A:L“))
MsgBox LastColumn(ActiveSheet.Range(„A:L“))

Function LastRow(rngBereich As Range) As Long
If Application.WorksheetFunction.CountA(rngBereich) \> 0 Then
 LastRow = rngBereich.Find(What:="\*", \_
 SearchOrder:=xlByRows, \_
 SearchDirection:=xlPrevious).Row
Else
 LastRow = 0
End If
End Function




Function LastColumn(rngBereich As Range) As Long
If Application.WorksheetFunction.CountA(rngBereich) \> 0 Then
 LastColumn = rngBereich.Find(What:="\*", \_
 SearchOrder:=xlByColumns, \_
 SearchDirection:=xlPrevious).Row
Else
 LastColumn = 0
End If
End Function

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas.

Tausend Dank dafür.

Falls nicht bekannt: hier eine möglicherweise interessante Ergänzung.

Statt dieser Zeile:

> If Application.WorksheetFunction.CountA(rngBereich) \> 0 Then

diese:

If IsMissing(rngBereich) = False Then

Die Funktion „IsMissing()“ überprüft, ob der Funktion das Argument übergeben wurde.

VG
Carsten

Grüezi Carsten

Tausend Dank dafür.

Aber immer gerne :smile:

Falls nicht bekannt: hier eine möglicherweise interessante
Ergänzung.

Statt dieser Zeile:

If Application.WorksheetFunction.CountA(rngBereich) > 0 Then

diese:

If IsMissing(rngBereich) = False Then

Die Funktion „IsMissing()“ überprüft, ob der Funktion das
Argument übergeben wurde.

Ja, das ist mir bekannt - die Zeile hat jedoch einen etwas anderen Hintergrund :wink:

Wenn der Bereich der geprüft wird absolut leer ist, kann die .Find-Methode nichts finden und gibt einen Error zurück. Diesen könnte man zwar mit OnError abfangen, mit ist jedoch die vorgängige Prüfung lieber und daher zählt die obige Code-Zeile die Anzahl der Inhalte im übergebenen Bereich.
Auf eine Prüfung ob überhaupt ein Bereich übergeben worden ist habe ich bewusst verzichtet.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -