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. Sie ist ideal, 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 ' MUSS hochzählen, sonst endet die Schleife nie
Loop
End Sub
Die Zeile i = i + 1 ist das ganze Geheimnis. Vergisst man sie, friert Excel ein. Diese Anleitung zeigt jede While-Variante — und wie Sie Excel nie wieder aufhängen.
Warum eine While- statt einer For-Schleife?
Eine For i = 1 To 100-Schleife ist für eine bekannte Anzahl. Eine While-Schleife ist für eine unbekannte Anzahl — „weiter, bis die Daten enden", „erneut versuchen, bis die Datei öffnet". Wenn Sie die Anzahl der Durchläufe vorher nicht nennen können, brauchen Sie While.
Die drei Schlüsselwörter (und welches Sie wählen)
| Form | Prüft Bedingung | Hinweis |
|---|---|---|
Do While ... Loop |
Vor jedem Durchlauf | Rumpf läuft evtl. 0-mal. Der moderne Standard. |
Do ... Loop While |
Nach jedem Durchlauf | Rumpf läuft mindestens einmal. |
Do Until ... Loop |
Vor (stoppt, wenn wahr) | Liest sich natürlich: „bis fertig". |
While ... Wend |
Vor jedem Durchlauf | Veraltet. Funktioniert, aber Microsoft empfiehlt Do. |
Empfehlung: Verwenden Sie
Do While/Do Until. Das alteWhile...Wendexistiert nur noch aus Kompatibilitätsgründen — es kann keinExitund gilt als überholt.
Beispiel 1 — Do While gegen Do Until (gleiches Ergebnis, klarere Absicht)
' Do While — „solange noch Daten da sind"
Do While Cells(i, 1).Value <> ""
' ... Zeile i verarbeiten
i = i + 1
Loop
' Do Until — „bis eine leere Zelle kommt" (oft leichter zu lesen)
Do Until Cells(i, 1).Value = ""
' ... Zeile i verarbeiten
i = i + 1
Loop
Beide stoppen bei der ersten leeren Zelle in Spalte A. Wählen Sie, was sich für Sie natürlicher liest — die Logik ist identisch.
Beispiel 2 — Bedingung am Ende prüfen
Manchmal muss der Rumpf mindestens einmal laufen — etwa beim Abfragen und anschließenden Prüfen einer Eingabe:
Sub PositiveZahlAbfragen()
Dim n As Double
Do
n = InputBox("Geben Sie eine positive Zahl ein")
Loop While n <= 0 ' fragt erneut, bis es passt
End Sub
Da die Prüfung in der Zeile Loop While steht, erscheint die InputBox immer einmal, bevor die Bedingung überhaupt geprüft wird.
Beispiel 3 — While...Wend (veraltet, für geerbten Code)
Sub AlteSumme()
Dim summe As Double, i As Long
i = 2
While Cells(i, 1).Value <> ""
summe = summe + Cells(i, 1).Value
i = i + 1
Wend
MsgBox "Summe: " & summe
End Sub
Das läuft auf jeder Excel-Version. Schreiben Sie aber neuen Code, wandeln Sie es in Do While ... Loop um, damit Sie Exit Do nutzen können.
Beispiel 4 — Die Schleife früh verlassen
Sub ErsteNegativeFinden()
Dim i As Long
i = 2
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value < 0 Then
MsgBox "Erste negative Zahl in Zeile " & i
Exit Do ' sofort raus
End If
i = i + 1
Loop
End Sub
Exit Do springt heraus, sobald Sie gefunden haben, was Sie suchen — ohne Hilfsvariable. (While...Wend kann das nicht, der Hauptgrund für Do.)
Beispiel 5 — Wiederholen mit Sicherheitszähler
Echte Automatisierung spricht mit Dateien, Netzwerken und anderen Programmen, die zeitweise ausfallen. Begrenzen Sie Wiederholungen immer, damit ein dauerhafter Fehler nicht endlos schleift:
Sub MitWiederholungOeffnen()
Dim versuche As Long
versuche = 0
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 ' höchstens 5 Versuche
End Sub
Die Grenze versuche < 5 ist der Unterschied zwischen „selbstheilend" und „für immer hängend".
Die Falle Nr. 1: die Endlosschleife
Eine While-Schleife läuft, bis ihre Bedingung falsch wird. Wenn nichts im Inneren das je bewirken kann, hängt Excel und Sie sehen „Excel reagiert nicht".
Drei Regeln, die es jedes Mal verhindern:
- Verändern Sie die Variable der Bedingung im Schleifenrumpf (
i = i + 1,n = n - 1…). - Sorgen Sie dafür, dass die Änderung zum Ausgang führt — hochzählen, wenn die Bedingung
< 10testet, nicht herunterzählen. - Setzen Sie einen Höchstzähler für jede Schleife, deren Ende von externem Zustand abhängt (Dateien, Eingaben, API-Aufrufe).
Gerade in einer Endlosschleife gefangen? Drücken Sie Esc oder Strg + Untbr, um das Makro zu unterbrechen, und korrigieren Sie dann die Bedingung.
Schluss mit dem Hüten von Schleifenzählern — beschreiben Sie das Ziel
While-Schleifen sind der Ort, an dem „gestern lief es noch"-Makros still zu eingefrorenen Tabellen werden — ein fehlender Zähler und die ganze Arbeitsmappe blockiert. ExcelMaster Agent lässt Sie das Ergebnis in klarem Deutsch nennen — „bereinige jede Zeile in Spalte A bis zum Datenende und schreibe das Ergebnis in Spalte B" — und erzeugt sicheren, begrenzten Code, der Excel nicht aufhängen kann. Kostenlos testen →
Weitere Anleitungen
- VBA For-Schleife in Excel — 8 Praxisbeispiele
- VBA If Then Else — 6 Praxisbeispiele
- VBA Select Case — der vollständige Leitfaden
FAQ
Was ist der Unterschied zwischen While und Do While in VBA?
Funktional sind sie fast identisch, wenn die Prüfung oben steht. Der praktische Unterschied: Do While unterstützt Exit Do und ist die empfohlene moderne Syntax; While...Wend ist veraltet und kann nicht vorzeitig 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.
Warum stoppt meine VBA While-Schleife nie? Die Variable in der Bedingung ändert sich nicht im Inneren oder bewegt sich vom Ausgangswert weg. Korrigieren Sie die Zählzeile und fügen Sie einen Höchstzähler als Sicherheitsnetz hinzu.
Do While oder Do Until?
Was sich klarer liest. Do While Bedingung läuft weiter, solange wahr; Do Until Bedingung läuft, bis wahr. Sie sind austauschbar.
