macros

Qué es una macro en Excel y cómo crear la primera con VBA

noviembre 7, 2026 Tuto Excel 13 min read
Qué es una macro en Excel y cómo crear la primera con VBA

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.

ArchivoOpcionesPersonalizar cinta de opciones

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:

VistaMacrosGrabar macro
ProgramadorCódigoGrabar macro

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 carpetas Microsoft Excel Objetos y Mó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.

A1fxProducto
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
Ventas

Pasos:

  1. Abre el libro InformeSemanal.xlsx y sitúate en la hoja Ventas.
  2. Ve a Programador > Código > Grabar macro. Aparece el cuadro:
  1. Pulsa Aceptar. La grabadora ya está grabando: cada clic se convierte en código.
  2. Haz clic en D1 y escribe =HOY() (en inglés, =TODAY()). Pulsa Entrar.
  3. Selecciona A1:C1. En Inicio > Fuente > Negrita, aplica negrita.
  4. Selecciona A1:C8. En Inicio > Fuente > Bordes > Borde grueso, dibuja el contorno.
  5. Vuelve a Programador > Código > Detener grabación.
  6. Guarda el libro como .xlsm:
ArchivoGuardar comoLibro de Excel habilitado con macros (*.xlsm)
Comprueba: en D1 ves la fecha de hoy, los encabezados están en negrita y A1:C8 tiene un borde grueso. Al pulsar Ctrl+Mayús+F, todo se aplica de nuevo sobre la hoja en la que estés.

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í:

  1. Programador > Controles > Insertar. En la primera fila de los controles de formulario, elige Botón.
ProgramadorControlesInsertarBotón (control de formulario)
  1. Dibuja el botón en la hoja, por ejemplo en F2. Al soltar, se abre el cuadro Asignar macro.
  2. Elige FormatearInforme y pulsa Aceptar.
  3. Clic derecho sobre el botón > Modificar texto y escribe Formatear informe.
Comprueba: al hacer clic en el botón se aplica la macro sobre la hoja en la que estés. Si la hoja es otra, primero vuelve a Ventas.

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 nombre Saludo. Los paréntesis se quedan vacíos porque no recibe datos.
  • Range("A1").Value = "Hola": en la celda A1 escribe el texto Hola. Value es el valor, sin formato.
  • MsgBox "Listo": abre una ventana con el texto Listo y 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.

Nota: dentro de VBA, las fórmulas se escriben en inglés y con comas: =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.
Comprueba: ejecuta con F5. A1 está en negrita, A1:C8 tiene un borde, D1 muestra la fecha y al final aparece el mensaje con esa misma fecha.

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. Long cubre 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 texto A1:C y el número de la variable, dando A1:C28 o lo que toque.
Cuidado: si la columna A tiene un hueco en medio, la macro se para en ese hueco. Si la hoja tiene celdas vacías al final de los datos, 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:

  1. Archivo > Guardar como.
  2. En Tipo, elige *Libro de Excel habilitado con macros (.xlsm)**.
  3. Nombre: InformeSemanal.xlsm. Guardar.
  4. Si Excel pregunta si quieres cambiar el formato, pulsa No y vuelve a guardar como .xlsm.
Comprueba: al volver a abrir, Alt+F8 lista de nuevo la macro 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:

  1. Si ves la barra amarilla, pulsa Habilitar contenido.
  2. Si el archivo está descargado de internet: clic derecho sobre el archivo > Propiedades > pestaña General > marca Desbloquear > Aceptar. Vuelve a abrir.
  3. 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.
Cuidado: desbloquear un archivo ejecuta todas sus macros sin avisar. Hazlo solo con libros que sepas de quién son.

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:

  1. Fíjate en la línea amarilla. Esa es la línea que falla.
  2. 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()".
  3. Si el error es Variable no definida y tienes Option Explicit, añade el Dim que falte.
  4. Pulsa F8 para ejecutar paso a paso y ver exactamente dónde se rompe.
Comprueba: después del cambio, F5 ejecuta sin abrir el editor y el 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:

  1. Abre el libro InformeSemanal.xlsm y ve a la hoja Ventas.
  2. Programador > Código > Grabar macro.
  1. Pulsa Aceptar. La macro se está grabando, pero no quieres grabar nada: pulsa Detener grabación de inmediato.
  2. 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
  1. Guarda el libro (Ctrl+S).
Nota: el atajo Ctrl+Mayús+F solo vale mientras el libro esté abierto. Si la macro se guarda en el Libro de macros personal (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.
Cuidado: un atajo 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, Cells y una variable Long para que sirva cada mes.
  • Guardar el libro como .xlsm para 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: .xlsx sin 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

  1. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026
  2. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 13/10/2026
  3. MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 13/10/2026