Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.End(xlDown).Row - Eleganter möglich in einer def. Range?

.End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 13:36:23
Ralf
Hallo liebes Forum,

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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 14:13:54
Beverly
Hi Ralf,

meinst du so etwas:

    LetzteZeile = 40 - Application.CountIf(Range("B13:E40").Columns(1), "")



Das funktioniert aber nur, wenn keine leeren Zellen zwischndurch vorkommen.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
AW: .End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 14:18:45
Ralf
Hallo Karin,

das ist eine gute Idee, ich habe es mal probiert und das scheint gut zu funktionieren. Vielen Dank!

Ich habe das jetzt so eingebaut.

LastRow = rng.Rows.Count - Application.CountIf(rng.Columns(1), "")


Wirkt schon etwas besser als das Schleifen-Gewusel mit dem Zähler.

Danke!

Gruß!
Anzeige
AW: .End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 14:14:52
Rudi Maintaire
Hallo,
Sub aa()

Dim rng As Range
Set rng = Range("A1:E40")
MsgBox rng.Find(What:="*", LookIn:=xlValues, lookat:=xlPart, SearchDirection:=xlPrevious).Row
End Sub

Gruß
Rudi
AW: .End(xlDown).Row - Eleganter möglich in einer def. Range?
23.09.2023 14:20:28
Ralf
Hallo Rudi,

vielen Dank! Das löst das Problem ja fast noch besser, da nun auch Leerzeilen korrekt berücksichtigt werden.
Wieder was dazugelernt, das ist mir so noch nicht untergekommen.

Vielen Dank!

24 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige