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, 4576 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien zusammenführen inkl. finden von doppelten Einträgen (3)

Frage von miczar zum Thema Batch & Shell ...

Debian
Kann Linux nicht im bios finden! (3)

Frage von pixelBf zum Thema Debian ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...