S42 · Macros en Excel (automatización y VBA básico)¶
Datos de la sesión
Fecha: viernes 4-sep-2026 · Horario: 20:00 – 22:00 · Duración: 2 h · Sesión: 42 de 47 · Unidad: 4
Una macro registra una secuencia de acciones para repetirla con consistencia. En esta sesión se automatizan tareas sencillas de Excel y se observa el código VBA generado por la grabadora. La meta es ahorrar trabajo repetitivo sin convertir el archivo en una caja negra: toda macro debe tener un propósito, un nombre claro y una forma segura de probarse.
Objetivos¶
- Identificar tareas repetitivas que conviene automatizar.
- Grabar, ejecutar y modificar una macro sencilla.
- Reconocer variables, rangos y procedimientos
Suben VBA. - Usar referencias explícitas y evitar seleccionar celdas innecesariamente.
- Guardar un libro habilitado para macros y revisar sus permisos.
Contenidos¶
1. Grabar una macro¶
Activa la pestaña Programador, elige Grabar macro, asigna un nombre sin espacios y realiza una tarea pequeña, como aplicar formato a una tabla o limpiar un reporte. Detén la grabación y ejecuta la macro sobre una copia de prueba.
2. Leer el código generado¶
En Programador → Visual Basic, una macro grabada tiene una estructura similar:
Sub FormatearReporte()
Range("A1:F1").Font.Bold = True
Range("A1:F1").Interior.Color = RGB(31, 78, 121)
End Sub
Reemplaza rangos fijos por referencias justificadas y comenta los pasos que otro usuario deba mantener.
Seguridad
No habilites macros de archivos desconocidos. Trabaja con una copia, revisa el código antes de ejecutarlo y no uses macros para ocultar datos, modificar archivos ajenos o enviar información sin autorización.
3. Condicionales: decidir qué hacer¶
Una macro puede revisar cada fila y aplicar una acción solo cuando se cumple una condición. Por ejemplo, marcar ventas altas y detectar datos incompletos:
Sub MarcarVentasAltas()
Dim ultimaFila As Long
Dim fila As Long
Dim monto As Double
ultimaFila = Cells(Rows.Count, "A").End(xlUp).Row
For fila = 2 To ultimaFila
monto = Cells(fila, "E").Value
If monto >= 1000 Then
Cells(fila, "F").Value = "Alta"
Cells(fila, "F").Interior.Color = RGB(198, 239, 206)
ElseIf monto > 0 Then
Cells(fila, "F").Value = "Regular"
Else
Cells(fila, "F").Value = "Revisar"
Cells(fila, "F").Interior.Color = RGB(255, 199, 206)
End If
Next fila
End Sub
If...Then...ElseIf...Else permite clasificar; For...Next repite la operación fila por fila. La columna E debe
contener el monto y la F queda como clasificación. Prueba primero sobre una copia y valida cinco filas a mano.
4. Bucles For: recorrer filas y columnas¶
Los bucles son útiles para tareas que cambian de tamaño. Este ejemplo encuentra la última fila, limpia espacios en una columna de nombres y cuenta cuántos registros están completos:
Sub LimpiarNombresYContar()
Dim ultimaFila As Long
Dim fila As Long
Dim completos As Long
ultimaFila = Cells(Rows.Count, "A").End(xlUp).Row
completos = 0
For fila = 2 To ultimaFila
Cells(fila, "A").Value = Trim(Cells(fila, "A").Value)
If Cells(fila, "A").Value <> "" And Cells(fila, "B").Value <> "" Then
completos = completos + 1
End If
Next fila
Range("H2").Value = "Registros completos"
Range("I2").Value = completos
End Sub
Para procesar varias columnas se puede anidar otro For:
Sub ResaltarCeldasVacias()
Dim fila As Long
Dim columna As Long
For fila = 2 To 20
For columna = 1 To 5
If Cells(fila, columna).Value = "" Then
Cells(fila, columna).Interior.Color = RGB(255, 235, 156)
End If
Next columna
Next fila
End Sub
5. For Each: recorrer hojas o celdas¶
For Each hace más legible el recorrido cuando no necesitas controlar el número de fila:
Sub RevisarHojasVacias()
Dim hoja As Worksheet
For Each hoja In ThisWorkbook.Worksheets
If Application.WorksheetFunction.CountA(hoja.UsedRange) = 0 Then
hoja.Tab.Color = RGB(255, 199, 206)
End If
Next hoja
End Sub
ThisWorkbook se refiere al libro que contiene la macro. Evita usar ActiveWorkbook cuando el procedimiento pueda
abrir o activar otro libro.
Buenas prácticas al repetir muchas operaciones
Usa Option Explicit, declara variables, limita el rango con ultimaFila, prueba con pocos registros y evita
Select/Activate. Si una macro tarda mucho, puedes desactivar temporalmente la actualización de pantalla y
restaurarla siempre al terminar:
Actividad en clase · Automatizar el reporte del PA4 (60 min)¶
- Formato grabado (10 min): graba una macro que aplique formato profesional al encabezado y a una tabla de resumen.
- Clasificación con
ForeIf(20 min): recorre las ventas, marca comoAlta,RegularoRevisarsegún el monto y colorea el resultado. - Control de calidad (15 min): recorre filas y columnas para resaltar celdas vacías y cuenta registros completos.
- Integración (10 min): combina limpieza, clasificación y formato en un procedimiento principal, sin repetir código innecesario.
- Cierre (5 min): prueba con datos conocidos, revisa el código y guarda como
PA4-macro-reporte.xlsm.
Entregable: el archivo .xlsm, una captura del resultado, el código comentado y una explicación breve de dónde
se utilizó un bucle y dónde un condicional.
Retos opcionales¶
- Cambia el umbral de ventas altas para leerlo desde una celda de configuración.
- Usa
Select Casepara clasificar sedes o categorías por texto. - Crea un resumen por sede recorriendo las filas con
Fory acumulando los montos. - Añade manejo de errores para restaurar
ScreenUpdatingsi ocurre un problema.