For Each?A diferencia del bucle For...Next tradicional (que usa un contador numérico como i = 1 To 20), el bucle For Each recorre automáticamente cada uno de los elementos de un grupo o colección (por ejemplo, cada celda de un rango) sin necesidad de gestionar manualmente los índices.
Dim celda As Range
For Each celda In Range("B2:B21")
' Código que realiza una acción en la celda actual
celda.Value = celda.Value * 2
Next celda
Offset (Desplazamiento)Offset?Al recorrer una columna con For Each, la variable (ej. celda) apunta a la celda evaluada. Para leer o escribir en celdas adyacentes, usamos Offset(Filas, Columnas).
Sintaxis: celda.Offset(filas, columnas)
celda.Offset(0, 1) ➔ Apunta a 1 columna a la derecha.celda.Offset(0, 2) ➔ Apunta a 2 columnas a la derecha.celda.Offset(0, -1) ➔ Apunta a 1 columna a la izquierda.Para garantizar que las macros funcionen con los rangos exactos, organiza la información respetando la numeración de filas y espacio indicado.
TABLA A: Control de Estudiantes (Rango A1:D21) — 20 Registros| Fila | A (Estudiante) | B (Nota 1) | C (Nota 2) | D (Estado) |
|---|---|---|---|---|
| 1 | Estudiante | Nota 1 | Nota 2 | Estado |
| 2 | Carlos Gómez | 85 | 90 | |
| 3 | Ana Martínez | 45 | 55 | |
| 4 | Luis Hernández | 70 | 65 | |
| 5 | Sofía López | 30 | 40 | |
| 6 | Mateo Ruiz | 95 | 100 | |
| 7 | Elena Torres | 60 | 58 | |
| 8 | Diego Morales | 78 | 82 | |
| 9 | Lucía Ramírez | 50 | 62 | |
| 10 | Javier Fernández | 92 | 88 | |
| 11 | Camila Navarro | 42 | 50 | |
| 12 | Andrés Castillo | 65 | 70 | |
| 13 | Valeria Rojas | 88 | 94 | |
| 14 | Gabriel Vargas | 35 | 48 | |
| 15 | Mariana Delgado | 73 | 79 | |
| 16 | Santiago Castro | 58 | 61 | |
| 17 | Daniela Ortíz | 100 | 96 | |
| 18 | Tomás Silva | 52 | 55 | |
| 19 | Paula Mendoza | 81 | 84 | |
| 20 | Nicolás Guerrero | 40 | 38 | |
| 21 | Andrea Paredes | 67 | 72 |
| 22 | --- ESPACIO EN BLANCO (FILA VACÍA 22) --- | |||
| 23 | --- ESPACIO EN BLANCO (FILA VACÍA 23) --- | |||
| Fila | A (Artículo) | B (Stock) | C (Precio Un.) | D (Alerta Stock) |
|---|---|---|---|---|
| 24 | Artículo | Stock | Precio Un. ($) | Alerta Stock |
| 25 | Cuaderno A4 | 15 | 4.50 | |
| 26 | Lápiz Grafito | 4 | 0.80 | |
| 27 | Mochila Escolar | 8 | 35.00 | |
| 28 | Regla 30cm | 2 | 1.50 | |
| 29 | Marcadores x12 | 25 | 8.00 | |
| 30 | Borrador | 3 | 0.50 | |
| 31 | Tijeras | 12 | 3.20 | |
| 32 | Carpeta Plástica | 5 | 2.10 | |
| 33 | Pegamento en Barra | 18 | 1.80 | |
| 34 | Calculadora Científica | 3 | 18.50 | |
| 35 | Compás Metálico | 7 | 4.20 | |
| 36 | Caja de Colores x24 | 30 | 12.00 | |
| 37 | Resaltador Amarillo | 1 | 1.10 | |
| 38 | Sacapuntas metálico | 22 | 0.90 | |
| 39 | Block de Notas | 6 | 3.00 | |
| 40 | Bolígrafo Azul | 45 | 0.70 | |
| 41 | Corrector Líquido | 2 | 2.50 | |
| 42 | Grapadora Mediana | 4 | 6.80 | |
| 43 | Cinta Adhesiva | 14 | 1.30 | |
| 44 | Pinceles Set x5 | 3 | 7.40 |
Crea un bucle For Each que recorra la columna Nota 1 de la TABLA A (rango B2:B21). Si la nota es mayor o igual a 60, escribe "Aprobado" en la columna Estado (usando Offset(0, 2) en la columna D). De lo contrario, escribe "Reprobado".
Recorre los datos de Nota 2 en la TABLA A (rango C2:C21). Si la nota es mayor o igual a 90, aplica un fondo verde claro a esa celda específica empleando celda.Interior.Color = RGB(200, 255, 200).
Recorre la columna Stock de la TABLA B (rango B25:B44). Si el stock es menor a 5 unidades, escribe el texto "REORDENAR URGENTE" en la columna Alerta Stock (usando Offset(0, 2) en la columna D).
Recorre las celdas con los precios unitarios en la TABLA B (rango C25:C44). Aplica un incremento general del 10% a cada precio (reescribiendo el valor con celda.Value = celda.Value * 1.10).
Recorre los precios de los artículos en la TABLA B (rango C25:C44). Usa una variable acumuladora para contar cuántos artículos tienen un precio inferior a $3.00 y muestra un cuadro de mensaje (MsgBox) con el resultado total.
Recorre la columna Nota 1 de la TABLA A (rango B2:B21). Si la nota del estudiante se encuentra entre 50 y 59 inclusive (utiliza If...And), escribe "Recuperación" en la columna Estado usando Offset(0, 2).
Recorre los nombres de los artículos en la TABLA B (rango A25:A44). Si el precio correspondiente situado dos columnas a la derecha (Offset(0, 2)) es mayor a $10.00, aplica formato negrita al nombre del artículo (celda.Font.Bold = True).
Recorre los nombres de los estudiantes en la TABLA A (rango A2:A21). Calcula el promedio de sus dos notas desplazándote con Offset(0, 1) y Offset(0, 2). Si el promedio resultante es superior a 85, escribe "Destacado" en la columna Estado (Offset(0, 3)).
Recorre el rango de la columna Alerta Stock en la TABLA B (rango D25:D44). Si la celda no tiene ningún texto (If celda.Value = ""), escribe la palabra "Stock Correcto".
Recorre la lista de estudiantes en la TABLA A (rango A2:A21). Evalúa el número de fila con celda.Row Mod 2 = 0; si la fila es par, aplica un color de fondo gris claro (RGB(240, 240, 240)) a esa celda.