Lección 12 de 12 · Nivel 3: Avanzado
Macros en Excel: qué son, ejemplos y cómo crearlas con VBA
En esta lección
- Grabar macros que repiten tareas con un clic.
- Leer y modificar el código VBA que genera Excel.
- Escribir tus primeras macros con bucles y condiciones.
- Saber cuándo usar macros, Power Query u otras alternativas.
Una macro es una serie de instrucciones guardadas que Excel ejecuta por ti: dar formato a un reporte, copiar datos de una hoja a otra, generar un PDF por cliente. Se escriben en VBA (Visual Basic for Applications), un lenguaje de programación incluido en Excel para Windows y Mac. Es la última pieza para pasar de usuario avanzado a la persona que automatiza el trabajo de su equipo.
Preparar Excel
- Muestra la pestaña Programador: Archivo → Opciones → Personalizar cinta de opciones → marca Programador.
- Guarda los libros con macros como .xlsm (Libro de Excel habilitado para macros). Un .xlsx no puede contener macros: si lo guardas así, se borran.
Una macro puede borrar archivos o enviar datos. Por eso Excel desactiva por defecto las macros de archivos que vienen de internet o del correo, y muestra una barra amarilla en los demás casos. Activa solo macros de archivos que conozcas y de fuentes confiables. Si un archivo propio descargado de tu correo está bloqueado, puedes desbloquearlo en Windows con clic derecho en el archivo → Propiedades → Desbloquear.
Tu primera macro grabada
La grabadora convierte tus clics en código, sin escribir nada:
- Programador → Grabar macro. Nómbrala sin espacios, por ejemplo
FormatoReporte. Puedes asignarle un atajo como Ctrl + Mayús + R. - Haz las acciones: pon en negrita la fila 1, aplica relleno de color, ajusta el ancho de columnas, aplica formato de moneda a la columna D, inmoviliza la fila superior.
- Programador → Detener grabación.
Abre otro reporte con la misma estructura y ejecuta la macro (Programador → Macros → Ejecutar o con el atajo). Excel repite todo en un segundo.
Referencias absolutas o relativas
Por defecto, la grabadora registra celdas exactas (A1, D2…). Si activas Usar referencias relativas antes de grabar, registra movimientos relativos a la celda donde estés ("una a la derecha, dos abajo"). Es la misma idea que las referencias de la lección 3, aplicada a acciones.
1. Grabas una macro y guardas el libro como .xlsx. ¿Qué pasa?
Los .xlsx no admiten macros. Excel te avisa al guardar; elige Libro habilitado para macros (.xlsm).
El editor de VBA
Pulsa Alt + F11 (o Programador → Visual Basic). En la carpeta Módulos verás el código grabado. Será algo parecido a esto, aunque más largo, porque la grabadora registra todo:
Sub FormatoReporte()
Rows("1:1").Font.Bold = True
Range("A1:F1").Interior.Color = RGB(31, 78, 121)
Range("A1:F1").Font.Color = RGB(255, 255, 255)
Columns("A:F").AutoFit
Columns("D:D").NumberFormat = "$#,##0.00"
End Sub
Cómo leerlo:
Sub ... End Subdelimita la macro.Range("A1:F1")es un rango;RowsyColumns, filas y columnas.- Después del punto vienen las propiedades:
.Font.Bold,.Interior.Color,.Value… - En VBA los formatos y las funciones van en inglés, con coma como separador, aunque tu Excel esté en español.
Escribir macros: variables, bucles y condiciones
La grabadora no sabe repetir ni decidir. Para eso se escribe código. Si hiciste el curso de Python, reconocerás todas las ideas.
Marcar facturas vencidas
Supón una hoja con la fecha de vencimiento en la columna D y quieres escribir "Vencida" en la E cuando la fecha ya pasó:
Sub MarcarVencidas()
Dim fila As Long
Dim ultima As Long
ultima = Cells(Rows.Count, "A").End(xlUp).Row ' última fila con datos
For fila = 2 To ultima
If Cells(fila, "D").Value < Date Then
Cells(fila, "E").Value = "Vencida"
Cells(fila, "E").Font.Color = RGB(192, 0, 0)
Else
Cells(fila, "E").Value = "Al día"
End If
Next fila
MsgBox "Revisadas " & (ultima - 1) & " facturas."
End Sub
Dimdeclara variables;Longes un número entero grande.Cells(fila, "D")es la celda de esa fila en la columna D.End(xlUp)equivale a Ctrl + ↑ desde el final de la hoja: encuentra la última fila con datos, aunque la lista crezca.Datees la fecha de hoy, comoHOY().- El apóstrofo
'inicia un comentario.
Usar funciones de Excel dentro de VBA
Dim total As Double
total = WorksheetFunction.Sum(Range("D2:D500"))
Range("H1").Value = total
Una hoja por región
Ejemplo más avanzado: crear una hoja con los datos de cada región a partir de la lista de ventas (columna B = región).
Sub HojaPorRegion()
Dim datos As Worksheet, nueva As Worksheet
Dim region As Variant
Set datos = Worksheets("Ventas")
For Each region In Array("Norte", "Sur", "Centro")
Set nueva = Worksheets.Add(After:=Worksheets(Worksheets.Count))
nueva.Name = region
datos.Range("A1").CurrentRegion.AutoFilter Field:=2, Criteria1:=region
datos.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy nueva.Range("A1")
datos.AutoFilterMode = False
Next region
End Sub
2. ¿Para qué sirve Cells(Rows.Count, "A").End(xlUp).Row?
Sube desde la última fila de la hoja hasta el primer dato, como Ctrl + ↑. Así la macro funciona aunque la lista crezca.
3. Dentro de VBA, ¿cómo se escribe un formato de moneda?
VBA usa siempre la notación en inglés: coma para miles y punto para decimales. Excel lo mostrará según tu configuración regional.
Ejecutar macros cómodamente
- Botón en la hoja: Insertar → Formas, dibuja un rectángulo, clic derecho → Asignar macro.
- Atajo de teclado: en Macros → Opciones.
- Libro de macros personal: al grabar, elige guardar en Libro de macros personal para tener la macro disponible en todos tus archivos.
En el editor, pulsa F8 para ejecutar la macro línea a línea y ver qué hace cada instrucción. Guarda una copia del archivo antes de probar macros nuevas: las acciones de una macro no se pueden deshacer con Ctrl + Z.
¿Macros, Power Query o algo más?
| Necesitas… | Mejor opción |
|---|---|
| Importar, limpiar y unir datos que se repiten cada mes | Power Query (lección 11) |
| Resúmenes que se actualizan solos | Tablas dinámicas o funciones de matriz dinámica |
| Acciones sobre el libro: formatos, crear hojas, PDFs, correos, botones | Macros VBA |
| Automatizar en Excel para la web o conectar con Teams y Outlook | Office Scripts y Power Automate (Microsoft 365) |
| Procesar archivos enormes o conectarte a APIs | Python |
4. Cada mes unes 5 reportes CSV y los limpias. ¿Qué herramienta es la más adecuada?
Importar y limpiar datos repetitivos es justo para lo que existe Power Query, y es más fácil de mantener que una macro.
Proyecto final del curso
Construye un libro Control de ventas que reúna lo aprendido en las 12 lecciones:
- Una consulta de Power Query que importe y limpie las ventas desde una carpeta (lección 11).
- Una hoja de captura de pedidos con validación de datos y protección (lección 8).
- Un panel con tabla dinámica, gráfico y segmentación (lección 9) y un buscador con
FILTRAR(lección 10). - Una macro con botón que marque los pedidos vencidos y otra que dé formato al reporte.
Checklist de nivel avanzado
- ¿Al pulsar Actualizar todo se actualizan los datos, la tabla dinámica y el gráfico?
- ¿La hoja de captura impide fechas y cantidades inválidas?
- ¿El libro está guardado como .xlsm y las macros funcionan con más filas de las que tenías al crearlas?
Resumen del curso
- Básico: organización de datos, fórmulas, referencias, formato y tablas.
- Intermedio: SI, BUSCARV y BUSCARX, SUMAR.SI.CONJUNTO, validación y protección.
- Avanzado: tablas dinámicas, matrices dinámicas, Power Query y macros.
¡Felicidades, terminaste el curso de Excel! Con lo que sabes ya cubres lo que piden la mayoría de ofertas que exigen "Excel avanzado". Marca las lecciones como completadas para descargar tu certificado. Si quieres seguir, el siguiente paso natural es el análisis de datos con Python.
Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.