Programación en VBA: Bucles For...Next y Do While...Loop

Aprende a automatizar tareas repetitivas controlando la iteración fija y la iteración basada en condiciones.

1. La Sentencia For...Next

💡 Función y Estructura

El bucle For...Next es una estructura de control iterativa que ejecuta un conjunto de instrucciones un número determinado e incrementatorio de veces. Utiliza un contador numérico que inicia en un valor dado y avanza hasta alcanzar un límite superior especificable.

Sintaxis General:

For contador = inicio To fin [Step paso]
    ' Instrucciones que se ejecutan en cada vuelta
Next contador

Ejemplo Práctico Guiado: Calcular Totales

Dada la siguiente tabla de ventas (filas 2 a 5), usaremos un bucle For...Next para calcular el total vendido (Cantidad * Precio) en la columna D.

Fila A (Producto) B (Cantidad) C (Precio Un.) D (Total)
1ProductoCantidadPrecio Un.Total
2Silla de Oficina5120.00600.00
3Escritorio2350.00700.00
4Lámpara LED1025.00250.00
5Organizador815.00120.00
Sub CalcularTotalesForNext()
    Dim i As Integer
    
    ' Recorremos desde la fila 2 hasta la fila 5
    For i = 2 To 5
        Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
    Next i
End Sub

2. La Sentencia Do While...Loop

💡 Función y Estructura

El bucle Do While...Loop repite un bloque de código mientras una condición dada sea Verdadera (True). Es ideal para situaciones donde no conocemos de antemano cuántas filas de datos existen y necesitamos iterar hasta encontrar una celda vacía o cumplir cierto criterio dinámico.

Sintaxis General:

Dim i As Integer
i = 2 ' Fila inicial

Do While Cells(i, 1).Value <> ""
    ' Instrucciones
    i = i + 1 ' Incrementar el contador manualmente para evitar un bucle infinito
Loop

Ejemplo Práctico Guiado: Procesar Filas Dinámicas

Evaluaremos las ventas comenzando en la fila 2 y continuaremos mientras la celda del producto no esté vacía. Si la cantidad es menor a 5, marcaremos en la columna C la etiqueta "Revisar".

Fila A (Producto) B (Cantidad) C (Estado)
1ProductoCantidadEstado
2Teclado USB3Revisar
3Monitor 24"12OK
4Ratón Óptico2Revisar
5(Fin de datos)
Sub EvaluarInventarioDoWhile()
    Dim fila As Integer
    fila = 2
    
    ' Evalúa hasta que la celda de la columna A esté vacía
    Do While Cells(fila, 1).Value <> ""
        If Cells(fila, 2).Value < 5 Then
            Cells(fila, 3).Value = "Revisar"
        Else
            Cells(fila, 3).Value = "OK"
        End If
        
        fila = fila + 1 ' IMPORTANTE: Avanzar a la siguiente fila
    Loop
End Sub

3. Tablas de Datos para la Práctica (20 Registros Cada Una)

Ubica las siguientes tablas exactamente en la posición indicada de las filas de tu hoja de Excel para garantizar que la solución de los ejercicios sea precisa.

TABLA 1: Planilla de Ventas Diarias (Rango A1:D21) — Para Ejercicios 1 a 5 (For Next)
Fila A (Vendedor) B (Ventas Brutas $) C (Comisión $) D (Categoría)
1VendedorVentas Brutas ($)Comisión ($)Categoría
2Juan Pérez1500.00
3María López2800.00
4Pedro Gómez950.00
5Carmen Ruiz4200.00
6Roberto Díaz3100.00
7Lucía Fernández1850.00
8Gonzalo Torres800.00
9Andrea Morales5300.00
10Sergio Castro2200.00
11Natalia Ramos1250.00
12Javier Ortiz3900.00
13Patricia Silva470.00
14Fernando Vega6100.00
15Claudia Rojas1900.00
16Hugo Mendoza2750.00
17Beatriz Vargas3400.00
18Manuel Paredes890.00
19Irene Castillo4500.00
20Gabriel Guerrero2100.00
21Mónica Navarro1650.00
22--- ESPACIO EN BLANCO (FILA VACÍA 22) ---
23--- ESPACIO EN BLANCO (FILA VACÍA 23) ---
TABLA 2: Control de Producción Lote (Rango A24:D44) — Para Ejercicios 6 a 10 (Do While)
Fila A (Lote ID) B (Unidades Prod.) C (Defectuosas) D (Calidad)
24Lote IDUnidades Prod.DefectuosasCalidad
25LOT-10150012
26LOT-10275025
27LOT-1033202
28LOT-104110045
29LOT-1056008
30LOT-10645018
31LOT-10790030
32LOT-1088205
33LOT-10940022
34LOT-11068011
35LOT-111125060
36LOT-1123101
37LOT-11355014
38LOT-11496028
39LOT-1157209
40LOT-11688035
41LOT-11764010
42LOT-1185104
43LOT-119105052
44LOT-12043015

4. Taller Práctico en Clase (10 Ejercicios)

Sección A: Ejercicios con For...Next (Usando Tabla 1 - Filas 2 a 21)

Ejercicio 1 Cálculo de Comisión de Ventas

Escribe una macro con el bucle For...Next que recorra desde la fila 2 hasta la fila 21. Calcula una comisión del 5% sobre las **Ventas Brutas** (columna B) y asigna el resultado en la columna **Comisión** (columna C).

Ejercicio 2 Clasificación por Categoría

Mediante un bucle For...Next (filas 2 a 21), evalúa la columna **Ventas Brutas** (columna B). Si las ventas son superiores o iguales a $3,000, escribe el texto "Senior" en la columna **Categoría** (columna D); si son menores, escribe "Junior".

Ejercicio 3 Formato a Ventas Bajas

Crea una macro `For...Next` que revise las filas de la 2 a la 21. Si las **Ventas Brutas** son inferiores a $1,000, cambia el color de fuente de esa celda (columna B) a rojo (Cells(i, 2).Font.Color = RGB(255, 0, 0)).

Ejercicio 4 Contador de Vendedores Destacados

Construye una macro que recorra las filas 2 a 21 con `For...Next` para contar cuántos vendedores registraron ventas superiores a $4,000. Al finalizar la iteración, muestra el resultado mediante un cuadro de diálogo MsgBox.

Ejercicio 5 Incremento Porcentual Gradual

Utilizando un bucle `For...Next` de la fila 2 a la 21, aplica un aumento del 10% únicamente a los vendedores con ventas brutas entre $1,000 y $2,500 inclusive. Actualiza el valor directo en la celda de la columna B.

Sección B: Ejercicios con Do While...Loop (Usando Tabla 2 - Iniciando en Fila 25)

Ejercicio 6 Control de Calidad por Porcentaje de Defectos

Usa un bucle Do While...Loop para iterar mientras la celda de **Lote ID** (columna A) no esté vacía, iniciando en la fila 25. Si las **Defectuosas** (columna C) superan el 3% de las **Unidades Prod.** (columna B), escribe "Rechazado" en la columna **Calidad** (columna D); en caso contrario escribe "Aprobado".

Ejercicio 7 Marcado de Lotes Grandes

Escribe una macro `Do While` que recorra la Tabla 2 desde la fila 25 hasta encontrar una celda vacía en la columna A. Si las **Unidades Prod.** son mayores a 800, aplica un color de fondo verde claro a la celda del **Lote ID** (columna A).

Ejercicio 8 Conteo Acumulado de Unidades Producción

Crea una macro con `Do While...Loop` que recorra los registros a partir de la fila 25. Suma en una variable el total de **Unidades Prod.** (columna B) hasta que encuentre una fila vacía y muestra el total acumulado en un MsgBox.

Ejercicio 9 Auditoría de Defectos Críticos

Mediante un bucle `Do While`, recorre los lotes iniciando en la fila 25. Si la cantidad de unidades **Defectuosas** (columna C) es mayor o igual a 30, escribe el texto "AUDITORÍA URGENTE" en la columna **Calidad** (columna D).

Ejercicio 10 Resaltado Intercalado Condicional

Construye una macro con `Do While...Loop` que empiece en la fila 25 y avance dinámicamente. Evalúa si el número de fila es par (i Mod 2 = 0); de ser así, aplica un fondo gris muy claro (RGB(245, 245, 245)) a todo el rango de la fila actual desde la columna A a la D.