🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA While-Schleife in Excel — schleifen, ohne Excel einzufrieren

|

VBA While-Schleife in Excel — schleifen, ohne Excel einzufrieren

Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 · zuletzt geprüft am 05.06.2026

Kurz gesagt — Eine While-Schleife wiederholt Code, solange eine Bedingung wahr bleibt. Nehmen Sie sie, wenn Sie die Zeilenzahl vorher nicht kennen. Kopieren und anpassen:

Sub BisLeerDurchlaufen()
    Dim i As Long
    i = 2                                   ' in Zeile 2 starten
    Do While Cells(i, 1).Value <> ""        ' läuft, solange Spalte A Daten hat
        Cells(i, 2).Value = Cells(i, 1).Value * 1.1
        i = i + 1                           ' der Schritt, der die Schleife beendet
    Loop
End Sub

Die Geschichten vom eingefrorenen Excel gehen alle auf eine fehlende Zeile zurück. Verstehen Sie das Warum, und Sie schreiben nie wieder eine.

Die eine Idee: Eine Schleife ist ein Versprechen, dass sie endet — und Sie halten es

Eine For i = 1 To 100-Schleife endet von selbst. Die For-Anweisung besitzt den Zähler; sie kann nicht ewig laufen, selbst wenn Sie nichts tun.

Eine While-Schleife übergibt diese Verantwortung Ihnen. Sie läuft genau so lange, wie ihre Bedingung True ist, und hat keine Ahnung, wie sie diese Bedingung umlegt. Jede While-Schleife ist also ein Versprechen — „das wird irgendwann False" — und Sie halten es. Eine Endlosschleife ist kein Freak-Unfall; sie ist das, was in dem Moment passiert, in dem Sie das Versprechen brechen.

Diese Sicht sagt Ihnen, wann Sie überhaupt zur While-Schleife greifen: für eine unbekannte Anzahl — „bis die Daten enden", „bis die Datei öffnet". Wenn Sie die Durchläufe vorher beziffern können, wollen Sie For — und haben die Chance, das Versprechen zu brechen, gar nicht erst.

Die Regel, die das Versprechen hält: Initialisierung, Test, Schritt

Jede korrekte While-Schleife hat dieselben drei Teile. Benennen Sie sie, und die Endlosschleife lässt sich nicht mehr versehentlich schreiben:

i = 2                              ' 1. INIT  — die Variable setzen, die der Test liest
Do While Cells(i, 1).Value <> ""   ' 2. TEST  — das Versprechen: das wird False
    ' ... die Arbeit ...
    i = i + 1                      ' 3. SCHRITT — die Variable ZUM Ausgang bewegen
Loop

Eine Endlosschleife ist immer ein kaputter Teil 3: Der Schritt fehlt oder bewegt sich weg vom Ausgang (herunterzählen, wenn der Test will, dass der Wert wächst). „Warum stoppt meine Schleife nicht?" hat genau eine Antwort — finden Sie die Variable im TEST und prüfen Sie, ob der SCHRITT sie Richtung False drückt.

Das Schlüsselwort wählen — dasselbe Versprechen, klarere Absicht

Form Prüft das Versprechen Wofür
Do While ... Loop vor jedem Durchlauf Der moderne Standard. Rumpf läuft evtl. 0-mal.
Do Until ... Loop vor (stoppt, wenn wahr) Liest sich als „bis fertig" — oft klarer.
Do ... Loop While nach jedem Durchlauf Wenn der Rumpf mindestens einmal laufen muss.
While ... Wend vor jedem Durchlauf Veraltet — kann kein Exit, in neuem Code vermeiden.

Do While Bedingung und Do Until Bedingung sind dieselbe Schleife, zweimal gesagt — nehmen Sie, was sich natürlicher liest. Die eine echte Empfehlung: Do vor While...Wend, denn nur Do lässt Sie früh aussteigen.

' Prüfung am Ende — der Rumpf läuft immer einmal (z. B. abfragen, dann prüfen)
Do
    n = InputBox("Geben Sie eine positive Zahl ein")
Loop While n <= 0

Das Versprechen unter realen Bedingungen halten

Steigen Sie aus, sobald Sie fertig sindExit Do schlägt eine Hilfsvariable und ist der Grund, Do vorzuziehen:

Do While Cells(i, 1).Value <> ""
    If Cells(i, 1).Value < 0 Then
        MsgBox "Erste negative Zahl in Zeile " & i
        Exit Do
    End If
    i = i + 1
Loop

Hängt der Ausgang von der Außenwelt ab, geben Sie ein zweites Versprechen: eine harte Grenze. Dateien, Netzwerke und andere Apps fallen zeitweise aus, also kann eine Wiederholungsschleife, deren einziger Ausgang „es hat geklappt" ist, ewig laufen:

Dim versuche As Long
Do
    versuche = versuche + 1
    On Error Resume Next
    Workbooks.Open "C:\Berichte\taeglich.xlsx"
    On Error GoTo 0
    If Not Workbooks Is Nothing Then Exit Do
Loop While versuche < 5            ' die Grenze als Reserve-Versprechen

Die Grenze versuche < 5 macht aus „selbstheilend" ein „kann nicht hängen". Jede Schleife, die auf externen Zustand wartet, sollte eine haben.

Wenn das Versprechen bricht: die Endlosschleife

Wenn nichts im Inneren die Bedingung False machen kann, zeigt Excel „reagiert nicht" und Sie haben das Versprechen gebrochen. Drei Prüfungen verhindern es jedes Mal:

  1. Ändert der SCHRITT die Variable, die der TEST liest? (i = i + 1, n = n - 1, nächsten Datensatz lesen …)
  2. Bewegt der SCHRITT sich zum Ausgang? (wachsen, wenn der Test < 10 will, nicht schrumpfen)
  3. Hat eine Schleife mit externem Zustand eine Höchstgrenze?

Gerade in einer Endlosschleife gefangen? Drücken Sie Esc oder Strg + Untbr, um das Makro zu unterbrechen, und korrigieren Sie den SCHRITT vor dem Neustart.

Wann Sie die Schleife gar nicht schreiben sollten

Eine While-Schleife ist das richtige Werkzeug für „verarbeite, bis die Daten enden" — aber auch der häufigste Weg, auf dem aus einem laufenden Makro lautlos eine eingefrorene Arbeitsmappe wird. ExcelMaster Agent lässt Sie stattdessen das Ziel nennen — „bereinige jede Zeile in Spalte A bis zum Datenende und schreibe das Ergebnis in Spalte B" — und erzeugt begrenzten Code, der das Versprechen für Sie hält. Kostenlos testen →

Weitere Anleitungen

FAQ

Warum stoppt meine VBA While-Schleife nie? Der SCHRITT fehlt oder bewegt sich falsch. Finden Sie die Variable in der Bedingung und sorgen Sie dafür, dass etwas im Inneren sie zum Ausgangswert drückt. Eine Höchstgrenze als Sicherheitsnetz hinzufügen.

Was ist der Unterschied zwischen While und Do While? Funktional fast identisch am Schleifenanfang. Der praktische Unterschied: Do While unterstützt Exit Do und ist die empfohlene moderne Syntax; While...Wend ist veraltet und kann nicht früh aussteigen.

Wie durchlaufe ich Zeilen, bis eine Zelle leer ist? Do While Cells(i, 1).Value <> "" (oder Do Until Cells(i, 1).Value = "") und i bei jedem Durchlauf erhöhen. Bei der ersten leeren Zelle stoppen.

Do While oder Do Until? Was sich klarer liest. Do While läuft, solange wahr; Do Until läuft, bis wahr. Sie sind austauschbar.