For...NextEl 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
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) |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Precio Un. | Total |
| 2 | Silla de Oficina | 5 | 120.00 | 600.00 |
| 3 | Escritorio | 2 | 350.00 | 700.00 |
| 4 | Lámpara LED | 10 | 25.00 | 250.00 |
| 5 | Organizador | 8 | 15.00 | 120.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
Do While...LoopEl 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
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) |
|---|---|---|---|
| 1 | Producto | Cantidad | Estado |
| 2 | Teclado USB | 3 | Revisar |
| 3 | Monitor 24" | 12 | OK |
| 4 | Ratón Óptico | 2 | Revisar |
| 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
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) |
|---|---|---|---|---|
| 1 | Vendedor | Ventas Brutas ($) | Comisión ($) | Categoría |
| 2 | Juan Pérez | 1500.00 | ||
| 3 | María López | 2800.00 | ||
| 4 | Pedro Gómez | 950.00 | ||
| 5 | Carmen Ruiz | 4200.00 | ||
| 6 | Roberto Díaz | 3100.00 | ||
| 7 | Lucía Fernández | 1850.00 | ||
| 8 | Gonzalo Torres | 800.00 | ||
| 9 | Andrea Morales | 5300.00 | ||
| 10 | Sergio Castro | 2200.00 | ||
| 11 | Natalia Ramos | 1250.00 | ||
| 12 | Javier Ortiz | 3900.00 | ||
| 13 | Patricia Silva | 470.00 | ||
| 14 | Fernando Vega | 6100.00 | ||
| 15 | Claudia Rojas | 1900.00 | ||
| 16 | Hugo Mendoza | 2750.00 | ||
| 17 | Beatriz Vargas | 3400.00 | ||
| 18 | Manuel Paredes | 890.00 | ||
| 19 | Irene Castillo | 4500.00 | ||
| 20 | Gabriel Guerrero | 2100.00 | ||
| 21 | Mónica Navarro | 1650.00 |
| 22 | --- ESPACIO EN BLANCO (FILA VACÍA 22) --- | |||
| 23 | --- ESPACIO EN BLANCO (FILA VACÍA 23) --- | |||
| Fila | A (Lote ID) | B (Unidades Prod.) | C (Defectuosas) | D (Calidad) |
|---|---|---|---|---|
| 24 | Lote ID | Unidades Prod. | Defectuosas | Calidad |
| 25 | LOT-101 | 500 | 12 | |
| 26 | LOT-102 | 750 | 25 | |
| 27 | LOT-103 | 320 | 2 | |
| 28 | LOT-104 | 1100 | 45 | |
| 29 | LOT-105 | 600 | 8 | |
| 30 | LOT-106 | 450 | 18 | |
| 31 | LOT-107 | 900 | 30 | |
| 32 | LOT-108 | 820 | 5 | |
| 33 | LOT-109 | 400 | 22 | |
| 34 | LOT-110 | 680 | 11 | |
| 35 | LOT-111 | 1250 | 60 | |
| 36 | LOT-112 | 310 | 1 | |
| 37 | LOT-113 | 550 | 14 | |
| 38 | LOT-114 | 960 | 28 | |
| 39 | LOT-115 | 720 | 9 | |
| 40 | LOT-116 | 880 | 35 | |
| 41 | LOT-117 | 640 | 10 | |
| 42 | LOT-118 | 510 | 4 | |
| 43 | LOT-119 | 1050 | 52 | |
| 44 | LOT-120 | 430 | 15 |
For...Next (Usando Tabla 1 - Filas 2 a 21)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).
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".
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)).
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.
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.
Do While...Loop (Usando Tabla 2 - Iniciando en Fila 25)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".
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).
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.
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).
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.