xaumichi
Goto Top

Nächste, leere Zeile finden - nur in Bereich

Hallo!

Ich habe ein kleines Programm geschrieben, das eine nächste leere Zeile sucht.

....
...
With Worksheets("Mitarbeiter")  
            lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
            
            If lngZeile = 1 Then
                If Not IsEmpty(.Cells(1, 1)) Then lngZeile = lngZeile + 1
            ElseIf lngZeile < .Rows.Count And IsEmpty(.Cells(.Rows.Count, 1)) Then
                lngZeile = lngZeile + 1
            Else
                MsgBox "VOLL!":  Exit Sub  
            End If
...
...


Nun ist dieser Code jedoch so, dass die gesamte Spalte kontrolliert wird, wo der letzte Inhalt steht.
Wie kann ich diesen Suchberich nun auf einen Bereich (A2:A30) begrenzen?

Lg mike

Content-Key: 149621

Url: https://administrator.de/contentid/149621

Printed on: April 19, 2024 at 15:04 o'clock

Member: bastla
bastla Aug 24, 2010 at 14:03:37 (UTC)
Goto Top
Hallo xaumichi!

Ungetestet etwa so:
With Worksheets("Mitarbeiter")  
            Voll = True
            For lngZeile = 2 To 30
                If IsEmpty(.Cells(lngZeile,"A")) Then  
                    Voll = False
                    lngZeileFrei = lngZeile
                    Exit For
                End If
            Next
            If Voll Then
                MsgBox "VOLL!":  Exit Sub  
            Else
                MsgBox "Frei: A" & lngZeileFrei  
            End If
End With
Grüße
bastla
Mitglied: 76109
76109 Aug 24, 2010 at 14:37:32 (UTC)
Goto Top
Hallo Mike, Hallo bastla!

Code entfernt. Funktioniert leider nicht, wenn alle Zeilen leer sindface-smile

Gruß Dieter
Member: bastla
bastla Aug 24, 2010 at 14:43:48 (UTC)
Goto Top
@Dieter: Hybsch face-smile

Grüße
bastla
Mitglied: 76109
76109 Aug 24, 2010 at 14:47:46 (UTC)
Goto Top
Zitat von @bastla:
@Dieter: Hybsch face-smile
Dankeface-smile Funktioniert aber nicht so wie gedacht (siehe letzte Antwort)face-wink

Gruß Dieter
Member: bastla
bastla Aug 24, 2010 at 14:55:30 (UTC)
Goto Top
@Dieter: Hätte mir aber trotzdem gut gefallen ... face-wink - außerdem soll es ja in Zeile 1 offensichtlich eine Überschrift geben - daher also einfach den Bereich um diese Zeile erweitern ...

Grüße
bastla
Mitglied: 76109
76109 Aug 24, 2010 at 15:12:22 (UTC)
Goto Top
@bastla

Zitat von @bastla:
@Dieter: Hätte mir aber trotzdem gut gefallen ... face-wink - außerdem soll es ja in Zeile 1 offensichtlich eine
Überschrift geben - daher also einfach den Bereich um diese Zeile erweitern ...
Stimmt, in diesem Fall würde es funktionierenface-wink Aber bei anderen Gegebenheiten funktioniert's dann leider nicht korrekt. Von Daher gesehen keine gute Lösungface-smile

Gruß Dieter
Member: xaumichi
xaumichi Aug 24, 2010 at 16:30:32 (UTC)
Goto Top
Hm...dürfte doch nicht ganz so einfach sein!
Hätte jetzt auch ein bisschen herum probiert, hab aber auch leider nichts funktionstüchtiges zusammengebracht....

Lg Mike
Member: bastla
bastla Aug 24, 2010 at 16:49:38 (UTC)
Goto Top
Hallo xaumichi!

Habe inzwischen meinen Ansatz getestet - bei mir funktioniert das ...

Grüße
bastla
Mitglied: 76109
76109 Aug 24, 2010 at 17:31:38 (UTC)
Goto Top
Hallo zusammen!

Yepp, dem stimme ich zu. Bastlas Ansatz funktioniertface-smile, wobei man allerdings die überflüssige Variable lngZeileFrei und Voll noch entfernen könnte, da der Zähler lngZeile ja schon das Ergebnis nach dem Schleifenabbruch beinhaltet bzw. bei Voll den ungültigen Wert 31 enthält. Also sollte ein Test mit
If lngZeile > 30 Then MsgBox "Voll": Exit Sub  
nach der For-Schleife ausreichend seinface-wink

Es geht zwar auch über die .Cells(...).End(xlUp).Row-Methode, wobei anstatt Rows.Count der Wert der letzen Range-Zeile angegeben wird. Aber im Endeffekt ist diese Funktion etwas aufwendiger, weil bei dieser Methode, die letzte Zeile (Rows.Count oder sonstige Zeilenangabe) leer sein muss, ansonsten wird die Zeilennummer zurückgegeben, die sich aufwärts vor der nächsten Leerzeile befindet. D.h. wenn die letzte Zeile nicht leer ist und in Zeile 1 eine Überschrift steht, dann wird die Zeile 1 zurückgegeben. Deswegen sollte man diese Methode auch nur mit Rows.Count (Maxzeile) und der Sicherheit, das die allerletzte Zeile (bei mir 65536) leer ist, verwenden.

Gruß Dieter
Member: xaumichi
xaumichi Aug 25, 2010 at 06:19:45 (UTC)
Goto Top
Jup, hat geklappt!

Danke schön!

Lg Mike
Member: bastla
bastla Aug 25, 2010 at 11:31:21 (UTC)
Goto Top
@Dieter
Was "lngZeileFrei" anlangt hast Du natürlich Recht ...

Bei den wenigen Zeilen, um die es hier geht, wird der Sprung aus der Schleife wohl nicht wesentlich zu einer Verbesserung der Laufzeit beitragen face-wink - bei einem größeren Bereich dürfte es aber sinnvoll sein, nicht alle Zeilen durchlaufen zu müssen ...

Grüße
bastla
Mitglied: 76109
76109 Aug 25, 2010 at 11:51:53 (UTC)
Goto Top
Hallo bastla!

Zitat von @bastla:
Bei den wenigen Zeilen, um die es hier geht, wird der Sprung aus der Schleife wohl nicht wesentlich zu einer Verbesserung der
Laufzeit beitragen face-wink - bei einem größeren Bereich dürfte es aber sinnvoll sein, nicht alle Zeilen durchlaufen zu
müssen ...

Der Vorteil des Schleifenabbruchs liegt ja gerade darin, die Zeilennummer ohne größeren Aufwand zu ermitteln:
With Sheets("Mitarbeiter")  
    For lngZeile = 2 To 30
        If IsEmpty(.Cells(lngZeile, 1)) Then Exit For
    Next
        
    If lngZeile > 30 Then MsgBox "Voll!":  Exit Sub  
    
   '.....  
End With
sieht dann auch etwas hübscher ausface-smile

Gruß Dieter
Member: bastla
bastla Aug 25, 2010 at 12:31:12 (UTC)
Goto Top
Hallo Dieter!

Sorry - da war ich voll daneben ... face-sad

Mit der Einschätzung, dass Du das Ganze damit jetzt optimiert hast, sollte ich dann aber zur Abwechslung mal richtig liegen ... face-wink

Grüße
bastla
Mitglied: 76109
76109 Aug 25, 2010 at 12:41:51 (UTC)
Goto Top
Hallo bastla!

Zitat von @bastla:
Sorry - da war ich voll daneben ... face-sad
Sehe ich auch soface-wink
Mit der Einschätzung, dass Du das Ganze damit jetzt optimiert hast, sollte ich dann aber zur Abwechslung mal richtig liegen
... face-wink
Was heißt denn zur Abwechslung?face-smile Kommt doch recht selten vor, dass Du den Wald vor lauter Bäumen nicht siehstface-smile

Gruß Dieter