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, 4586 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
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ä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
Batsch doppelte Zeile in in Text finden und eine löschen (10)

Frage von GNLen1 zum Thema Batch & Shell ...

VB for Applications
gelöst Ausgewählten Bereich eines Excel Dokumentes per email verschicken (7)

Frage von Edd1ng zum Thema VB for Applications ...

Batch & Shell
Batch bestimme Zeile einer vorherigen batch einfügen (9)

Frage von Frensche zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (24)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (19)

Frage von smartino zum Thema Mac OS X ...

Hyper-V
Langsames Netzwerk i210 LAN Karte (10)

Frage von Akcent zum Thema Hyper-V ...

Netzwerke
Abisolierwerkzeug (10)

Frage von SarekHL zum Thema Netzwerke ...