.End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 13:36:23
Ralf
ich habe eine Frage bzw. benötige einen Hinweis für die Ermittlung der letzten Benutzenzeile in einer Range. Im Grunde ist das Ermitteln dieser Spalte durch die Funtkion der SpecialCells oder der .End(xlDown) Funktion relativ einfach. Dennoch habe ich mir im Kopf irgendwie ein Hirngespinst festgesetzt, bei dem ich gerne folgende Funktion realisieren möchte.
Ich gebe ein Range vor, diese Range kann völlig beliebig sein, hier als Beispiel:
Set rng= ws.Range("B10:E40")
Nun möchte ich nur in der ersten Spalte der o.g. Range nach der letzten benutzen Spalte in der Range suchen, ohne eventuelle Formeln zu berücksichtigen, die ein "" zurückgeben. Wenn ich in der ersten Spalte der Range suche, dann wird das irgendwie natürlich nicht auf die Range begrenzt, sondern der suche die komplette Spalte bis zur letzten Zeile durch und berücksichtigt dabei natürlich die enthaltenden Formeln die ein "" zurückgeben.
rng.Columns(1).End(xlDown).Row
Ich bekomme die Begrenzung auf die Range nicht hin. Man müsste ggf. schauen, wenn der gefundende Eintrag > ist als die letzte Row der Range, dann ist die letzte Zeile der Range das Ergebnis.
Aktuell mache ich das mit einer For-Each Schleife, bei der ich jeden Eintrag prüfe und dann einen Zähler hochzähle und das dann mit der Zeilen-Anzahl vergleiche
For Each test In rng.Columns(1).Rows
If test.Value2 > "" Then
k = k + 1
End If
Next
For Each test In rng.Columns(1).Rows
If test.Value2 > "" Then
k = k + 1
End If
Next
Anbei noch eine Beispieltabelle:
https://www.herber.de/bbs/user/163057.xlsx
Gibt es eventuell eine elegantere Lösung, bei der man wirklich nur die Range selbst durchsucht und direkt die ""-Rückgabewert ausblendet? Ich bin bisher leider nicht so wirklich fündig geworden. Aber irgendwie denke ich mir, dass das Range-Objekt doch so eine interne Funktion/Methode haben muss, oder?
Über einen Tipp bzw. Hinweis wäre ich Euch dankbar!
Vielen Dank!
Gruß
Ralf