Office: (Office 2010) DO WHILE vs FOR Schleife

Helfe beim Thema DO WHILE vs FOR Schleife in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, Ich habe ein größeres Makro mit einer Laufzeit von ca 5 Stunden. Dabei wird eine Tabelle mit bis zu 250000 Einträgen durchlaufen und die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von ThekesC, 11. September 2015.

  1. ThekesC Erfahrener User

    DO WHILE vs FOR Schleife


    Hallo,

    Ich habe ein größeres Makro mit einer Laufzeit von ca 5 Stunden.
    Dabei wird eine Tabelle mit bis zu 250000 Einträgen durchlaufen und die erste Spalte ist immer befüllt.
    Deshalb habe ich es mit

    Do While IsEmpty(Worksheets("Berechnung").Cells(COUNTER, 1)) = False
    COUNTER=COUNTER+1
    loop

    probiert.
    Bei ca 37000 Durchläufen bekomme ich aber eine Fehlermeldung, Überlauf.
    Deshalb benutze ich momentan eine For-Schleife die aber den Nachteil hat
    dass ich sie entweder für jeden Durchlauf ändere oder dass Sie halt ab
    und zu 50000 leere Zeilen abruft.

    Weiss jemand wieso die DO WHILE Schleife nicht funktioniert?
    Gibt es Alternativen?

    Danke
     
  2. Chrischi305
    Chrischi305 Erfahrener User
    Hi, der Fehler bei den 37000 kommt daher, dass die Variable "Counter" als Integer deklariert ist, wenn du diese als Long deklarierst, sollte das Problem nicht auftauchen.
     
    Chrischi305, 11. September 2015
    #2
  3. Exl121150 Erfahrener User
    Hallo,

    Alternativen dazu, die funktionieren und möglicherweise schneller sind:
    Mit SET, DO UNTIL:
    Code:
    Dim COUNTER As Long
    Dim Ws As Worksheet
    Set Ws = Worksheets("Berechnung")
    COUNTER = 1
    Do Until IsEmpty(Ws.Cells(COUNTER,1))
    '  ...
      COUNTER = COUNTER +1
    Loop
    
    oder mit WITH, FOR und EXIT FOR:
    Code:
    Dim COUNTER As Long
    With Worksheets("Berechnung")
      For COUNTER = 1 To 500000
        If IsEmpty(.Cells(COUNTER,1)) Then Exit For
        '  ...
      Next COUNTER
    End With
    
    oder möglicherweise auch mit WITH, FOR EACH und EXIT FOR:
    Code:
    Dim ZELLE As Range
    With Worksheets("Berechnung")
      For Each ZELLE In .Columns("A").Cells
        If IsEmpty(ZELLE) Then Exit For
        '  ...
      Next ZELLE
    End With
    
    Anmerkungen:
    1) Sobald COUNTER Werte über 32767 enthalten soll, muss sie zwingend als LONG deklariert werden.
    2) Ich würde auf alle Fälle die Referenz auf das Worksheet aus der Schleife herausziehen, also vor Schleifenstart 1x auswerten lassen, statt sie in der Schleife 500000x auswerten zu müssen. - Die Variante mit WITH funktioniert natürlich auch mit dem DO UNTIL-LOOP.
    3) Bei einer DO...LOOP-Schleife würde ich die DO-UNTIL...LOOP-Version nehmen, damit erspart man sich auch 500000x die Auswertung einer Negation in der einen oder anderen Form.
    4) Was dann letztendlich schneller ist, das hängt natürlich entscheidend davon ab, was anstelle des 3-Punkte-Kommentars im Echtprogramm zu stehen kommt.
     
    Zuletzt bearbeitet: 11. September 2015
    Exl121150, 11. September 2015
    #3
  4. Beverly
    Beverly Erfahrener User

    DO WHILE vs FOR Schleife

    Hi,

    zur Ursache deines Überlauf-Fehler hast du ja bereits die Antwort bekommen.

    Das "Problem" bei einer For-Schleife besteht darin, dass du zuerst die letzte belegte Zeile ermitteln musst - dann läuft sie unabhängig von einer fest vorgegebenen Zeilenanzahl:

    Code:
    Sub IfSchleife()
        Dim lngZeile As Long
        Dim lngLetzte As Long
        ' letzte belegte Zeile in Spalte A
        lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
        For lngZeile = 1 To lngLetzte
            '... hier dein Code was gemacht werden soll
        Next lngZeile
    End Sub
    
    
    Bis später,
    Karin
     
Thema:

DO WHILE vs FOR Schleife

Die Seite wird geladen...
  1. DO WHILE vs FOR Schleife - Similar Threads - WHILE FOR Schleife

  2. While-Schleife wird nicht beendet

    in Microsoft Access Hilfe
    While-Schleife wird nicht beendet: Hallo Forum Ein aus einem Unterformular soll in ein Feld im Hauptformular übernommen (fix abgespeichert) werden. Das Feld wurde nachträglich im Hauptformular (+ Tabelle) eingefügt. Nun habe ich...
  3. mehrere Do While Schleifen nacheinander

    in Microsoft Excel Hilfe
    mehrere Do While Schleifen nacheinander: Hallo zusammen, versuche mehrere Do While schleifen zum laufen zu bringen so schaut es aus: Private Sub UserForm_Activate() Dim dat As Date dat = Me.Label1.Caption sp = 1 Do While...
  4. Do While mit zwei Bedingungen

    in Microsoft Excel Hilfe
    Do While mit zwei Bedingungen: Hallo, wie muss folgender Code geändert werden, damit er bei der zweiten Bedingung nur Werte zulässt, die ein Nein in der jeweiligen Zelle haben? Do While Trim(CStr(Tabelle1.Cells(lZeile,...
  5. Do While Loop Schleife

    in Microsoft Access Hilfe
    Do While Loop Schleife: Hallo zusammen, ich brauche Unterstützung bei der Entwicklung einer Schleife. In Access habe ich eine Datenbank welche Trainingspläne fürs Schwimmen speichert. Nun soll automatisch ein neuer...
  6. Unterschied WHILE/UNTIL bei DO...LOOP

    in Microsoft Access Hilfe
    Unterschied WHILE/UNTIL bei DO...LOOP: Hallo Forum. Auch wenn diese Frage vielleicht ein wenig "überflüssig" (Nach dem Motto: Warum ist die Banane krumm?) ist *Smilie , beschäftigt mich dieses Thema schon eine ganze Weile. 1) Ich...
  7. Endlosschleife mit Do..While ??

    in Microsoft Excel Hilfe
    Endlosschleife mit Do..While ??: Hallo, ich möchte zwei Dateien mit einer Schleife in einem Makro öffnen. Ich erzeuge mir aber leider Endlosschleifen oder es wird nur eine Datei geöffnet. Hier mein Code: Sub dotest() Dim...
  8. Unterschied zwischen "while wend" & "Do w

    in Microsoft Excel Hilfe
    Unterschied zwischen "while wend" & "Do w: In meiner bisherigen Zeit habe ich beide Möglichkeiten schon erfolgreich verwendet, teilweise sogar beide in einem VBA Makro. Dadurch ist mir aufgefallen, das ich persönlich keine Unterschied...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden