Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Nächste, leere Zeile finden - nur in Bereich

Frage Microsoft Microsoft Office

Mitglied: xaumichi

xaumichi (Level 1) - Jetzt verbinden

24.08.2010 um 15:38 Uhr, 4603 Aufrufe, 14 Kommentare

Hallo!

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

01.
.... 
02.
... 
03.
With Worksheets("Mitarbeiter") 
04.
            lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row 
05.
             
06.
            If lngZeile = 1 Then 
07.
                If Not IsEmpty(.Cells(1, 1)) Then lngZeile = lngZeile + 1 
08.
            ElseIf lngZeile < .Rows.Count And IsEmpty(.Cells(.Rows.Count, 1)) Then 
09.
                lngZeile = lngZeile + 1 
10.
            Else 
11.
                MsgBox "VOLL!":  Exit Sub 
12.
            End If 
13.
... 
14.
...

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
Mitglied: bastla
24.08.2010 um 16:03 Uhr
Hallo xaumichi!

Ungetestet etwa so:
01.
With Worksheets("Mitarbeiter") 
02.
            Voll = True 
03.
            For lngZeile = 2 To 30 
04.
                If IsEmpty(.Cells(lngZeile,"A")) Then 
05.
                    Voll = False 
06.
                    lngZeileFrei = lngZeile 
07.
                    Exit For 
08.
                End If 
09.
            Next 
10.
            If Voll Then 
11.
                MsgBox "VOLL!":  Exit Sub 
12.
            Else 
13.
                MsgBox "Frei: A" & lngZeileFrei 
14.
            End If 
15.
End With
Grüße
bastla
Bitte warten ..
Mitglied: 76109
24.08.2010 um 16:37 Uhr
Hallo Mike, Hallo bastla!

Code entfernt. Funktioniert leider nicht, wenn alle Zeilen leer sind

Gruß Dieter
Bitte warten ..
Mitglied: bastla
24.08.2010 um 16:43 Uhr
@Dieter: Hybsch

Grüße
bastla
Bitte warten ..
Mitglied: 76109
24.08.2010 um 16:47 Uhr
Zitat von bastla:
@Dieter: Hybsch
Danke Funktioniert aber nicht so wie gedacht (siehe letzte Antwort)

Gruß Dieter
Bitte warten ..
Mitglied: bastla
24.08.2010 um 16:55 Uhr
@Dieter: Hätte mir aber trotzdem gut gefallen ... - außerdem soll es ja in Zeile 1 offensichtlich eine Überschrift geben - daher also einfach den Bereich um diese Zeile erweitern ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
24.08.2010 um 17:12 Uhr
@bastla

Zitat von bastla:
@Dieter: Hätte mir aber trotzdem gut gefallen ... - 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 funktionieren Aber bei anderen Gegebenheiten funktioniert's dann leider nicht korrekt. Von Daher gesehen keine gute Lösung

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
24.08.2010 um 18:30 Uhr
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
Bitte warten ..
Mitglied: bastla
24.08.2010 um 18:49 Uhr
Hallo xaumichi!

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

Grüße
bastla
Bitte warten ..
Mitglied: 76109
24.08.2010 um 19:31 Uhr
Hallo zusammen!

Yepp, dem stimme ich zu. Bastlas Ansatz funktioniert, 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
01.
If lngZeile > 30 Then MsgBox "Voll": Exit Sub
nach der For-Schleife ausreichend sein

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
Bitte warten ..
Mitglied: xaumichi
25.08.2010 um 08:19 Uhr
Jup, hat geklappt!

Danke schön!

Lg Mike
Bitte warten ..
Mitglied: bastla
25.08.2010 um 13:31 Uhr
@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 - bei einem größeren Bereich dürfte es aber sinnvoll sein, nicht alle Zeilen durchlaufen zu müssen ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
25.08.2010 um 13:51 Uhr
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 - 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:
01.
With Sheets("Mitarbeiter") 
02.
    For lngZeile = 2 To 30 
03.
        If IsEmpty(.Cells(lngZeile, 1)) Then Exit For 
04.
    Next 
05.
         
06.
    If lngZeile > 30 Then MsgBox "Voll!":  Exit Sub 
07.
     
08.
   '..... 
09.
End With
sieht dann auch etwas hübscher aus

Gruß Dieter
Bitte warten ..
Mitglied: bastla
25.08.2010 um 14:31 Uhr
Hallo Dieter!

Sorry - da war ich voll daneben ...

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

Grüße
bastla
Bitte warten ..
Mitglied: 76109
25.08.2010 um 14:41 Uhr
Hallo bastla!

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

Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
Administrator.de Feedback
gelöst Bug oder gewollt? Titel-Links in leerem Bereich klickbar (6)

Frage von 133417 zum Thema Administrator.de Feedback ...

Microsoft Office
gelöst Excel: viele leere Zeilen zwischendurch - effizient löschen? (9)

Frage von PixL86 zum Thema Microsoft Office ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Router & Routing
Grundkonfiguration Firewall und L3 Switch? (16)

Frage von Maik20 zum Thema Router & Routing ...

Firewall
Richtige Grundeinstellungen der Pfsense für mein Netzwerk (15)

Frage von Spitzbube zum Thema Firewall ...

Switche und Hubs
gelöst Cisco 2960x Stacking über mehrere Etagen (12)

Frage von b3scher zum Thema Switche und Hubs ...