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

Bucle While en VBA (Excel) — While, Do While y Do Until (5 ejemplos)

|

Bucle While en VBA (Excel) — While, Do While y Do Until (5 ejemplos)

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 viejo While...Wend solo sobrevive por compatibilidad: no admite Exit y 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:

  1. Cambia siempre la variable de la condición dentro del bucle (i = i + 1, n = n - 1…).
  2. Asegúrate de que el cambio va hacia la salida —incrementar cuando la condición prueba < 10, no decrementar—.
  3. 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

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.