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

Bucle While en VBA (Excel) — cómo bucear sin congelar Excel

|

Bucle While en VBA (Excel) — cómo bucear sin congelar Excel

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                           ' el paso que termina el bucle
    Loop
End Sub

Las historias de Excel congelado se remontan todas a una línea que falta. Entiende el porqué y no volverás a escribir una.

La idea central: un bucle es una promesa de que terminará — y la cumples tú

Un bucle For i = 1 To 100 termina solo. La instrucción For es dueña del contador; no puede correr para siempre aunque no hagas nada.

Un bucle While te entrega esa responsabilidad a ti. Corre exactamente mientras su condición sea True, y no tiene ni idea de cómo hacer que esa condición cambie. Así que cada bucle While es una promesa —«esto acabará volviéndose False»— y eres quien la cumple. Un bucle infinito no es un accidente raro; es lo que ocurre en el instante en que rompes la promesa.

Este encuadre te dice cuándo recurrir a un bucle While: para un número desconocido —«hasta que se acaben los datos», «hasta que el archivo abra»—. Si puedes cifrar los pasos de antemano, quieres For, y eliminas de raíz la posibilidad de romper la promesa.

La regla que cumple la promesa: inicio, prueba, paso

Todo bucle While correcto tiene las mismas tres partes. Nómbralas y el bucle infinito se vuelve imposible de escribir por accidente:

i = 2                              ' 1. INICIO — fija la variable que lee la prueba
Do While Cells(i, 1).Value <> ""   ' 2. PRUEBA — la promesa: esto se volverá False
    ' ... el trabajo ...
    i = i + 1                      ' 3. PASO   — mueve la variable HACIA la salida
Loop

Un bucle infinito es siempre una parte 3 rota: falta el paso, o se aleja de la salida (decrementar cuando la prueba quiere que el valor crezca). «¿Por qué no se detiene mi bucle?» tiene una sola respuesta — encuentra la variable de la PRUEBA y comprueba que el PASO la empuja hacia False.

Elegir la palabra clave — misma promesa, intención más clara

Forma Comprueba la promesa Para qué
Do While ... Loop antes de cada pasada La opción moderna. El cuerpo puede correr 0 veces.
Do Until ... Loop antes (se detiene si es verdadera) Se lee «hasta terminar» — a menudo más claro.
Do ... Loop While después de cada pasada Cuando el cuerpo debe correr al menos una vez.
While ... Wend antes de cada pasada Heredado — sin Exit, evítalo en código nuevo.

Do While condición y Do Until condición son el mismo bucle dicho de dos maneras — elige el que se lea más natural. La única recomendación real: prefiere Do a While...Wend, porque solo Do te deja salir antes.

' Prueba al final — el cuerpo siempre corre una vez (p. ej. pedir, luego validar)
Do
    n = InputBox("Introduce un número positivo")
Loop While n <= 0

Cumplir la promesa en condiciones reales

Sal en cuanto terminesExit Do supera a una variable indicadora, y es la razón de preferir Do:

Do While Cells(i, 1).Value <> ""
    If Cells(i, 1).Value < 0 Then
        MsgBox "Primer negativo en la fila " & i
        Exit Do
    End If
    i = i + 1
Loop

Cuando la salida depende del mundo exterior, añade una segunda promesa: un tope. Archivos, redes y otras aplicaciones fallan de forma intermitente, así que un bucle de reintento cuya única salida sea «funcionó» puede correr sin fin:

Dim intentos As Long
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            ' el tope, promesa de respaldo

La guarda intentos < 5 convierte «se autorrepara» en «no puede congelarse». Todo bucle que espera un estado externo debería tener una.

Cuando la promesa se rompe: el bucle infinito

Si nada en su interior puede volver la condición False, Excel muestra «no responde» y has roto la promesa. Tres comprobaciones lo evitan siempre:

  1. ¿El PASO cambia la variable que lee la PRUEBA? (i = i + 1, n = n - 1, leer el siguiente registro…)
  2. ¿El PASO va hacia la salida? (crecer cuando la prueba quiere < 10, no decrecer)
  3. ¿Un bucle con estado externo tiene un tope de iteraciones?

¿Atrapado ahora mismo en un bucle desbocado? Pulsa Esc o Ctrl + Pausa para interrumpir la macro, y corrige el PASO antes de volver a ejecutar.

Cuándo no deberías escribir el bucle en absoluto

Un bucle While es la herramienta correcta para «procesar hasta que se acaben los datos», pero también la forma más común en que una macro que funciona se convierte en silencio en una hoja congelada. ExcelMaster Agent te permite enunciar el objetivo en su lugar —«limpia cada fila de la columna A hasta que terminen los datos y escribe el resultado en la columna B»— y genera código acotado que cumple la promesa por ti. Pruébalo gratis →

Guías relacionadas

Preguntas frecuentes

¿Por qué mi bucle While de VBA nunca se detiene? El PASO falta o va en sentido equivocado. Encuentra la variable de la condición y asegúrate de que algo en su interior la empuje hacia el valor de salida. Añade un tope como red de seguridad.

¿Cuál es la diferencia entre While y Do While? Funcionalmente casi idénticos al inicio del bucle. La diferencia práctica: Do While admite Exit Do y es la sintaxis moderna recomendada; While...Wend es heredado y no puede salir antes.

¿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.

¿Do While o Do Until? El que se lea con más claridad. Do While continúa mientras es verdadera; Do Until continúa hasta que es verdadera. Son intercambiables.