Una macro es una manera de enseñarle a Excel a hacer los clics por ti. Tú le dices «pon esta fecha aquí, negrita ahí, borde grueso allá» y la grabadora lo traduce a un pequeño programa que puedes repetir cuando quieras. En este tutorial vas a grabar tu primera macro sobre un informe de ventas semanal, leer el código que la grabadora escribió y cambiarlo a mano para que sirva cada mes, todo en Excel para Windows con la pestaña Programador a la vista.
Lo que sabrás hacer al terminar: grabar una macro con la grabadora, leer las líneas que genera, editarlas en el editor de VBA, guardar el libro como .xlsm para que no se pierdan, asignarlas a un botón en la hoja y crear un atajo propio. Funciona en Microsoft 365, Excel 2024 y 2021; en 2019 y 2016 también, con la pestaña Programador activada. Excel para la web no ejecuta macros VBA, así que allí este tutorial no aplica.
Qué es una macro y para qué te sirve en Excel
Una macro es un programa corto que repite por ti los pasos que haces en Excel. En vez de repetir cada semana «copiar el rango, poner bordes, guardar como PDF», grabas esos clics una vez y a partir de ahí los lanza la macro con un atajo, un botón o un clic en una lista.
Piénsalo con el libro que va a crecer en este tutorial: el InformeSemanal de una pequeña tienda, con las ventas de la semana en una hoja y un resumen que cada lunes se pasa al jefe. Hoy lo haces a mano: copias A2:C8, le pones bordes, escribes la fecha en D1 con Ctrl+;, lo guardas como PDF. Cada lunes lo mismo. Con una macro, esos clics se quedan grabados y el lunes solo pulsas un botón.
La macro se guarda como un módulo de VBA dentro del libro de Excel, en un lenguaje que Excel entiende (Visual Basic for Applications). No necesitas escribirlo de cero: la grabadora te lo escribe mientras trabajas, y después lo lees y lo ajustas. Una macro se queda en el libro donde la grabaste, y se ejecuta solo cuando ese libro está abierto.
Dónde está el botón de macros y cómo se activa la pestaña Programador
Excel trae el botón de macros en la cinta, pero la pestaña donde se controla de verdad (Grabar macro, abrir el editor, insertar botones) viene oculta por defecto. Hay que sacarla una sola vez.
Pulsa Alt+F11: si se abre una ventana con un árbol a la izquierda titulado Proyecto, el editor de VBA ya está disponible aunque la pestaña Programador no se vea. Si no se abre, toca activarla.
En la columna derecha, Pestañas principales, marca Programador y pulsa Aceptar. La pestaña aparece al final de la cinta, a la derecha de Vista.
Ahora ya tienes dos formas de llegar a las macros:
La segunda ruta es la que vas a usar de aquí en adelante, porque desde la pestaña Programador también se abre el editor y se insertan botones.
La grabadora y el editor de VBA: dos caminos para lo mismo
La grabadora (Programador > Código > Grabar macro) traduce tus clics a VBA mientras trabajas. Escribe por ti: tú haces, ella apunta. Después puedes ejecutar esa macro las veces que quieras con Programador > Código > Macros (o Alt+F8) y seleccionar el nombre.
El editor de VBA es donde se lee y se reescribe ese código. Se abre con Alt+F11 o desde Programador > Código > Visual Basic. Aquí no hay cuadrícula: hay un editor de texto con palabras de colores. Es donde entras cuando la macro necesita algo que la grabadora no hace sola, como sumar o preguntar un dato con un cuadro.
Para lo que vamos a hacer, basta con los dos: la grabadora para el trabajo mecánico y el editor para los retoques.
El editor de VBA: ventanas Proyecto, Propiedades y Código
Al pulsar Alt+F11 se abre el editor con tres paneles:
- Explorador de proyectos (arriba a la izquierda): los libros abiertos como
VBAProject (InformeSemanal.xlsm)y, dentro, las carpetasMicrosoft Excel ObjetosyMódulos. - Ventana Propiedades (abajo a la izquierda): las propiedades del elemento seleccionado (el nombre del módulo, por ejemplo).
- Ventana Código (a la derecha): el texto del módulo con palabras en azul (palabras clave de VBA), verde (comentarios) y negro (el resto).
Para añadir una macro nueva a mano, menú Insertar > Módulo. Se abre un módulo en blanco con dos líneas escritas:
Sub Macro1()
End Sub
Entre Sub y End Sub se escribe lo que la macro hace. F5 ejecuta el código desde donde esté el cursor; F8 lo ejecuta paso a paso, línea a línea, y es la mejor forma de ver dónde se para cuando algo falla.
Tu primera macro grabada: poner fecha y formato en una columna
El libro de este paso es InformeSemanal.xlsx. La hoja Ventas tiene las ventas de la semana pasada. La macro va a poner la fecha de hoy en D1, poner los encabezados en negrita y dibujar un borde grueso alrededor de A1:C8.
| A | B | C | |
|---|---|---|---|
| 1 | Producto | Cantidad | Importe |
| 2 | Cuaderno | 12 | 28,80 |
| 3 | Bolígrafo | 30 | 15,00 |
| 4 | Mochila | 4 | 96,00 |
| 5 | Lápiz | 25 | 6,25 |
| 6 | Carpeta | 10 | 22,00 |
| 7 | Rotulador | 18 | 13,50 |
| 8 | Calculadora | 2 | 34,00 |
Pasos:
- Abre el libro
InformeSemanal.xlsxy sitúate en la hoja Ventas. - Ve a Programador > Código > Grabar macro. Aparece el cuadro:
- Pulsa Aceptar. La grabadora ya está grabando: cada clic se convierte en código.
- Haz clic en D1 y escribe
=HOY()(en inglés,=TODAY()). Pulsa Entrar. - Selecciona A1:C1. En Inicio > Fuente > Negrita, aplica negrita.
- Selecciona A1:C8. En Inicio > Fuente > Bordes > Borde grueso, dibuja el contorno.
- Vuelve a Programador > Código > Detener grabación.
- Guarda el libro como
.xlsm:
Asignar la macro a un botón en la hoja
Un atajo está bien, pero un botón en la propia hoja es más difícil de olvidar. Se inserta así:
- Programador > Controles > Insertar. En la primera fila de los controles de formulario, elige Botón.
- Dibuja el botón en la hoja, por ejemplo en F2. Al soltar, se abre el cuadro Asignar macro.
- Elige
FormatearInformey pulsa Aceptar. - Clic derecho sobre el botón > Modificar texto y escribe
Formatear informe.
El código que generó la grabadora: leerlo sin miedo
Pulsa Alt+F11 y abre, en el Explorador de proyectos, Módulos > Módulo1. Ahí está el código que la grabadora escribió. Simplificado, se lee así:
Sub FormatearInforme()
Range("D1").FormulaR1C1 = "=TODAY()"
Range("A1:C1").Font.Bold = True
Range("A1:C8").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("A1:C8").Borders(xlEdgeLeft).Weight = xlMedium
' ... y muchas más líneas de bordes, una por cada lado
End Sub
Fíjate en dos cosas. Primera: las fórmulas se escriben en inglés dentro de VBA y con comas: =TODAY(). Por eso Range("D1").FormulaR1C1 lleva la fórmula en inglés, aunque en la hoja se vea =HOY(). Segunda: cada acción que hiciste se traduce a una línea; aplicar bordes a un rango genera una línea por cada lado del borde.
La grabadora es generosa con el código. No pasa nada: funciona igual.
Cambiar celdas y mensajes desde el código
Vamos a reescribir la macro a mano para entender qué hace cada línea. Este es el ejemplo clásico de la documentación de VBA: un Sub Saludo que escribe en una celda y muestra un mensaje.
Sub Saludo()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
Línea a línea:
Sub Saludo(): empieza la macro con el nombreSaludo. Los paréntesis se quedan vacíos porque no recibe datos.Range("A1").Value = "Hola": en la celda A1 escribe el textoHola.Valuees el valor, sin formato.MsgBox "Listo": abre una ventana con el textoListoy un botón Aceptar.End Sub: cierra la macro.
Para nuestro informe, podemos añadir un mensaje al final que confirme el trabajo:
Sub FormatearInforme()
Range("D1").FormulaR1C1 = "=TODAY()"
Range("A1:C1").Font.Bold = True
Range("A1:C8").BorderAround Weight:=xlMedium
MsgBox "Informe formateado con la fecha " & Range("D1").Value
End Sub
BorderAround dibuja el contorno de un rango en una sola línea, en vez de las cuatro de la grabadora. El & pega el texto del MsgBox con el valor de D1.
=TODAY(), =SUM(A1:A8). En la hoja, al lector le sale en español y con punto y coma. Por eso se usa FormulaR1C1 para fórmulas y .Value para textos o números.Referencias fijas y con Variables para que sirva cada mes
La macro apunta siempre a D1 y a A1:C8. Si en julio las ventas son diez filas en vez de ocho, A1:C8 se queda corto y el formato no llega a las nuevas. La solución es usar una variable que guarde la última fila con datos.
Sub FormatearInforme()
Dim ultimaFila As Long
ultimaFila = Cells(Rows.Count, 1).End(xlUp).Row
Range("D1").FormulaR1C1 = "=TODAY()"
Range("A1:C1").Font.Bold = True
Range("A1:C" & ultimaFila).BorderAround Weight:=xlMedium
MsgBox "Informe formateado hasta la fila " & ultimaFila
End Sub
Qué hace cada línea:
Dim ultimaFila As Long: declara la variable como número entero largo.Longcubre filas de sobra (una hoja tiene 1.048.576 filas).Cells(Rows.Count, 1).End(xlUp).Row: cuenta cuántas filas tiene la columna A hasta la última con datos. Es la forma estándar de «buscar la última fila» en VBA.Range("A1:C" & ultimaFila): pega con&el textoA1:Cy el número de la variable, dandoA1:C28o lo que toque.
End(xlUp) las salta bien; si hay huecos en medio, hay que decidir qué se considera «última fila».Por qué la macro no corre o se para a mitad
Las tres causas más reales al empezar son: el archivo se guardó como .xlsx y perdió la macro, Excel bloquea las macros al abrir el archivo, o el código tiene un error de compilación. Cada una tiene arreglo en menos de un minuto.
El archivo se guardó como .xlsx y la macro desapareció
Lo que ves: ayer la macro funcionaba; hoy al abrir el libro, Alt+F8 muestra la lista de macros vacía.
Causa: guardaste el libro con Archivo > Guardar y el formato era .xlsx, que no admite macros. Excel las borra al guardar.
Arreglo:
- Archivo > Guardar como.
- En Tipo, elige *Libro de Excel habilitado con macros (.xlsm)**.
- Nombre:
InformeSemanal.xlsm. Guardar. - Si Excel pregunta si quieres cambiar el formato, pulsa No y vuelve a guardar como
.xlsm.
FormatearInforme.Las macros están deshabilitadas al abrir el libro
Lo que ves: al abrir el .xlsm aparece una barra amarilla con Habilitar contenido y, al pulsar, la macro sigue sin estar disponible; o el libro vino descargado de internet y las macros no se ejecutan.
Causa: Excel protege al usuario deshabilitando las macros de libros que vienen de fuera hasta que el usuario dice que confía en ellos.
Arreglo:
- Si ves la barra amarilla, pulsa Habilitar contenido.
- Si el archivo está descargado de internet: clic derecho sobre el archivo > Propiedades > pestaña General > marca Desbloquear > Aceptar. Vuelve a abrir.
- Si confías en el autor, también puedes añadir la carpeta como ubicación de confianza en Archivo > Opciones > Centro de confianza > Ubicaciones de confianza.
Error de compilación o se abre una ventana de VBA al ejecutar
Lo que ves: al pulsar el botón o F5, se abre el editor y una línea aparece resaltada en amarillo. El mensaje dice Error de compilación: variable no definida o Sub o Function no definida.
Causa: escribiste el nombre de una variable mal, o usaste Option Explicit (al principio del módulo, fuerza a declarar todas las variables) y olvidaste una.
Arreglo:
- Fíjate en la línea amarilla. Esa es la línea que falla.
- Si la línea es
Range("D1").FormulaR1C1 = "=HOY()", el problema es que la fórmula está en español dentro de VBA: cambia a"=TODAY()". - Si el error es Variable no definida y tienes
Option Explicit, añade elDimque falte. - Pulsa F8 para ejecutar paso a paso y ver exactamente dónde se rompe.
MsgBox final se muestra.Crear un atajo propio para tu macro sin tocar el Excel
Excel para Windows no trae un cuadro para reasignar sus atajos de teclado, pero una macro sí puede tener un atajo propio. Se le pone al grabarla, en el mismo cuadro del principio.
Pasos para tener un atajo permanente en el libro:
- Abre el libro
InformeSemanal.xlsmy ve a la hoja Ventas. - Programador > Código > Grabar macro.
- Pulsa Aceptar. La macro se está grabando, pero no quieres grabar nada: pulsa Detener grabación de inmediato.
- Alt+F11. En Módulos > Módulo1, deja solo el código que ya tenías:
Sub FormatearInforme()
' ... el código completo con Dim, Range y MsgBox
End Sub
- Guarda el libro (Ctrl+S).
Personal.xlsb), el atajo vale en todos los libros de ese equipo. Para el día a día, Este libro es lo más limpio.Ctrl+letra tapa el atajo de Excel con esa letra mientras el libro esté abierto. Evita letras que Excel use, como B (negrita), K (hipervínculo) o S (guardar).Lo que ya sabes hacer con macros y el siguiente paso
- Grabar una macro con la grabadora y detenerla cuando quieras.
- Leer el código que la grabadora dejó en el editor de VBA (Alt+F11).
- Reescribir la macro con
Range,MsgBox,Cellsy una variableLongpara que sirva cada mes. - Guardar el libro como
.xlsmpara que la macro no se pierda. - Asignar la macro a un botón en la hoja y a un atajo
Ctrl+Mayús+letra. - Detectar y arreglar los tres errores más comunes:
.xlsxsin macros, macros deshabilitadas y error de compilación.
El siguiente paso natural es que la macro se ejecute sola al abrir el libro. Se hace con un evento Workbook_Open en el objeto ThisWorkbook del editor de VBA, una línea que llama a FormatearInforme cuando Excel carga el archivo. Eso lo verás en el siguiente tutorial.
Dudas al usar macros en Excel
¿Qué diferencia hay entre una macro y una fórmula? ¿Puedo grabar macros en Excel para la web? ¿Por qué mis macros se pierden al guardar? ¿Cómo comparto un libro con macros sin que se deshabiliten? ¿Es peligroso habilitar macros de un archivo descargado? ¿Las macros funcionan en Excel para Mac?
Fuentes
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 13/10/2026
- MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 13/10/2026