Probado en: Excel 365 v2509 · Excel 2021 · Excel 2019 · última verificación 05/06/2026
En resumen — Un bucle While repite código mientras una condición siga siendo verdadera. Úsalo cuando no sabes de antemano el número de filas. Copia y adapta:
Sub BucleHastaVacio()
Dim i As Long
i = 2 ' empezar en la fila 2
Do While Cells(i, 1).Value <> "" ' corre mientras la columna A tenga datos
Cells(i, 2).Value = Cells(i, 1).Value * 1.1
i = i + 1 ' DEBE avanzar, o el bucle nunca termina
Loop
End Sub
La línea i = i + 1 es la clave de todo. Si la olvidas, Excel se congela. Esta guía muestra cada variante de While y cómo no volver a colgar Excel.
¿Por qué un bucle While en lugar de For?
Un bucle For i = 1 To 100 es para un número conocido. Un bucle While es para un número desconocido —«seguir hasta que se acaben los datos», «reintentar hasta que el archivo abra»—. Si no puedes decir cuántas iteraciones habrá de antemano, necesitas While.
Las tres palabras clave (y cuál elegir)
| Forma | Comprueba la condición | Nota |
|---|---|---|
Do While ... Loop |
Antes de cada pasada | El cuerpo puede correr 0 veces. La opción moderna. |
Do ... Loop While |
Después de cada pasada | El cuerpo corre al menos una vez. |
Do Until ... Loop |
Antes (se detiene si es verdadera) | Se lee natural: «hasta terminar». |
While ... Wend |
Antes de cada pasada | Heredado. Funciona, pero Microsoft recomienda Do. |
Recomendación: usa
Do While/Do Until. El viejoWhile...Wendsolo sobrevive por compatibilidad: no admiteExity se considera un estilo obsoleto.
Ejemplo 1 — Do While frente a Do Until (mismo resultado, intención más clara)
' Do While — «mientras todavía haya datos»
Do While Cells(i, 1).Value <> ""
' ... procesar fila i
i = i + 1
Loop
' Do Until — «hasta una celda vacía» (a menudo más legible)
Do Until Cells(i, 1).Value = ""
' ... procesar fila i
i = i + 1
Loop
Ambos se detienen en la primera celda vacía de la columna A. Elige el que se lea más natural para ti: la lógica es la misma.
Ejemplo 2 — Comprobar la condición al final
A veces el cuerpo debe ejecutarse al menos una vez, por ejemplo pedir un dato y luego validarlo:
Sub PedirPositivo()
Dim n As Double
Do
n = InputBox("Introduce un número positivo")
Loop While n <= 0 ' vuelve a preguntar hasta que cumpla
End Sub
Como la prueba está en la línea Loop While, el InputBox siempre aparece una vez antes de comprobar la condición.
Ejemplo 3 — While...Wend (heredado, para código que heredas)
Sub SumaAntigua()
Dim total As Double, i As Long
i = 2
While Cells(i, 1).Value <> ""
total = total + Cells(i, 1).Value
i = i + 1
Wend
MsgBox "Total: " & total
End Sub
Funciona en todas las versiones de Excel. Pero si escribes código nuevo, conviértelo en Do While ... Loop para poder usar Exit Do.
Ejemplo 4 — Salir del bucle antes de tiempo
Sub BuscarPrimerNegativo()
Dim i As Long
i = 2
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value < 0 Then
MsgBox "Primer negativo en la fila " & i
Exit Do ' salir de inmediato
End If
i = i + 1
Loop
End Sub
Exit Do salta fuera en cuanto encuentras lo que buscabas, sin variable indicadora. (While...Wend no puede hacerlo, la razón principal para preferir Do.)
Ejemplo 5 — Reintentar con un contador de seguridad
La automatización real habla con archivos, redes y otras aplicaciones que fallan de forma intermitente. Limita siempre los reintentos para que un fallo permanente no haga un bucle eterno:
Sub AbrirConReintento()
Dim intentos As Long
intentos = 0
Do
intentos = intentos + 1
On Error Resume Next
Workbooks.Open "C:\informes\diario.xlsx"
On Error GoTo 0
If Not Workbooks Is Nothing Then Exit Do
Loop While intentos < 5 ' nunca más de 5 intentos
End Sub
La guarda intentos < 5 marca la diferencia entre «se autorrepara» y «colgado para siempre».
La trampa n.º 1: el bucle infinito
Un bucle While corre hasta que su condición se vuelve falsa. Si nada en su interior puede lograrlo, Excel se cuelga y verás «Excel no responde».
Tres reglas que lo evitan siempre:
- Cambia siempre la variable de la condición dentro del bucle (
i = i + 1,n = n - 1…). - Asegúrate de que el cambio va hacia la salida —incrementar cuando la condición prueba
< 10, no decrementar—. - Añade un contador máximo para todo bucle cuyo fin dependa de un estado externo (archivos, entrada del usuario, llamadas a API).
¿Atrapado ahora mismo en un bucle desbocado? Pulsa Esc o Ctrl + Pausa para interrumpir la macro y luego corrige la condición.
Deja de vigilar contadores de bucle: describe el objetivo
Los bucles While son donde las macros «ayer funcionaba» se convierten en silencio en hojas congeladas: un incremento que falta y todo el libro se bloquea. ExcelMaster Agent te permite enunciar el resultado en español claro —«limpia cada fila de la columna A hasta que terminen los datos y escribe el resultado en la columna B»— y genera código seguro y acotado que no puede colgar Excel. Pruébalo gratis →
Guías relacionadas
- Bucle For en VBA — 8 ejemplos prácticos
- VBA If Then Else — 6 ejemplos prácticos
- VBA Select Case — la guía completa con ejemplos
Preguntas frecuentes
¿Cuál es la diferencia entre While y Do While en VBA?
Funcionalmente son casi idénticos cuando la prueba está arriba. La diferencia práctica: Do While admite Exit Do y es la sintaxis moderna recomendada; While...Wend es heredado y no puede salir antes de tiempo.
¿Cómo recorro filas hasta que una celda esté vacía?
Do While Cells(i, 1).Value <> "" (o Do Until Cells(i, 1).Value = ""), incrementando i en cada pasada. Detente en la primera celda vacía.
¿Por qué mi bucle While de VBA nunca se detiene? La variable de la condición no cambia dentro del bucle, o se aleja del valor de salida. Corrige la línea de incremento y añade un contador máximo como red de seguridad.
¿Do While o Do Until?
El que se lea con más claridad. Do While condición continúa mientras es verdadera; Do Until condición continúa hasta que es verdadera. Son intercambiables.
