Guía de VBA: Bucle For Each y Función Offset

Aprende a recorrer colecciones y celdas en Excel de forma rápida, directa y elegante.

1. ¿Qué es el bucle For Each?

💡 Concepto Clave

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.

Estructura Básica en VBA

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

2. Herramienta Clave: La Propiedad Offset (Desplazamiento)

🎯 ¿Cómo funciona 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)

3. Estructura Exacta de la Hoja de Excel (Copia tal cual en tu Hoja)

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)
1EstudianteNota 1Nota 2Estado
2Carlos Gómez8590
3Ana Martínez4555
4Luis Hernández7065
5Sofía López3040
6Mateo Ruiz95100
7Elena Torres6058
8Diego Morales7882
9Lucía Ramírez5062
10Javier Fernández9288
11Camila Navarro4250
12Andrés Castillo6570
13Valeria Rojas8894
14Gabriel Vargas3548
15Mariana Delgado7379
16Santiago Castro5861
17Daniela Ortíz10096
18Tomás Silva5255
19Paula Mendoza8184
20Nicolás Guerrero4038
21Andrea Paredes6772
22--- ESPACIO EN BLANCO (FILA VACÍA 22) ---
23--- ESPACIO EN BLANCO (FILA VACÍA 23) ---
TABLA B: Inventario de Tienda (Rango A24:D44) — 20 Registros
Fila A (Artículo) B (Stock) C (Precio Un.) D (Alerta Stock)
24ArtículoStockPrecio Un. ($)Alerta Stock
25Cuaderno A4154.50
26Lápiz Grafito40.80
27Mochila Escolar835.00
28Regla 30cm21.50
29Marcadores x12258.00
30Borrador30.50
31Tijeras123.20
32Carpeta Plástica52.10
33Pegamento en Barra181.80
34Calculadora Científica318.50
35Compás Metálico74.20
36Caja de Colores x243012.00
37Resaltador Amarillo11.10
38Sacapuntas metálico220.90
39Block de Notas63.00
40Bolígrafo Azul450.70
41Corrector Líquido22.50
42Grapadora Mediana46.80
43Cinta Adhesiva141.30
44Pinceles Set x537.40

4. Taller Práctico en Clase (10 Problemas Especificados)

Ejercicio 1 Evaluación de Aprobados

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

Ejercicio 2 Resaltar Notas Excelentes

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

Ejercicio 3 Alerta de Stock Crítico

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

Ejercicio 4 Ajuste General de Precios

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

Ejercicio 5 Conteo de Artículos Económicos

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.

Ejercicio 6 Estado de Recuperación

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

Ejercicio 7 Formato de Artículos Costosos

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

Ejercicio 8 Identificación de Alumnos Destacados

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

Ejercicio 9 Relleno de Celdas Vacías

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

Ejercicio 10 Formato Intercalado de Filas

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.