macros

Libro con macros en Excel: cómo crearlo y guardarlo (.xlsm)

noviembre 6, 2026 Tuto Excel 13 min read
Libro con macros en Excel: cómo crearlo y guardarlo (.xlsm)

Un libro macro es un archivo de Excel guardado con la extensión .xlsm que contiene una o varias macros, pequeños programas escritos en VBA (Visual Basic para Applications) que repiten por ti los mismos pasos: dar formato, mover datos, abrir otros libros o enviar un correo. La macro graba lo que haces con el ratón y el teclado y lo convierte en código que se ejecuta con un clic, con un botón o con un atajo. Al terminar este tutorial vas a saber grabar una macro, leer el código que ha escrito la grabadora, escribir una a mano, crear un botón en la hoja y compartir el archivo sin que las macros se pierdan. El editor de VBA y la grabadora están en Excel para Windows y Mac desde hace años; en Excel para la web no se pueden usar macros VBA y se automatiza con Scripts de Office.

Qué es un libro macro y para qué sirve

Un libro normal (.xlsx) solo guarda datos, fórmulas y formatos. Un libro macro (.xlsm) añade a todo eso uno o varios programas hechos con VBA que viven dentro del archivo. La macro nace de una necesidad muy concreta: haces cada semana el mismo informe a mano —pones la fila de totales en negrita, aplicas formato moneda a una columna, copias un rango a otra hoja, mandas el archivo por correo— y al final son veinte clics idénticos. La grabadora de macros convierte esos veinte clics en un guion que Excel puede repetir solo.

La macro se guarda DENTRO del libro, no en un sitio aparte. Si compartes el archivo, la macro viaja con él. Si guardas el libro en formato .xlsx, Excel borra las macros sin avisarte del todo, solo con un mensaje que a veces se pasa por alto. Por eso el libro macro siempre se guarda en .xlsm.

La diferencia entre .xlsx, .xlsm y .xls

Formato Qué admite Desde qué versión
.xlsx Datos, fórmulas, formatos, gráficos, tablas dinámicas. No guarda macros. Excel 2007
.xlsm Todo lo del .xlsx más macros VBA. Excel 2007
.xlsb Libro binario, más rápido y pequeño para libros grandes; también guarda macros. Excel 2007
.xls Formato antiguo, máximo 65.536 filas; también puede llevar macros. Excel 97-2003 (soporte terminado)
.csv Solo texto con los valores de la hoja activa; pierde fórmulas, formatos y macros. Todas
Nota: la extensión decide qué se guarda. Si un .xlsx tenía macros y lo guardas otra vez como .xlsx, las pierdes.

Por qué hace falta la pestaña Programador para crear macros

La pestaña Programador viene oculta porque no la usa todo el mundo. La activas en Archivo > Opciones > Personalizar cinta de opciones y marcas la casilla Programador en la columna derecha. A partir de ahí, en Programador > Código aparecen los botones Grabar macro, Macros y Visual Basic, que son los tres que usarás en este tutorial. Más información sobre la pestaña Programador en la ayuda oficial de Excel.

Dónde se crea una macro y qué objetos toca

Alt+F11 abre el editor de VBA, una ventana aparte con su propio menú y sus propias barras. Ahí no hay cuadrícula de celdas: hay un árbol a la izquierda con los libros y sus hojas, y a la derecha la hoja de código en blanco donde se escribe la macro. Insertar > Módulo crea el módulo donde va el código, y en su interior empiezas con Sub NombreDeLaMacro() y terminas con End Sub.

La macro maneja objetos que ya conoces de Excel: Application es el propio Excel; Workbooks son los libros abiertos; Worksheets son las hojas de un libro; Range("A1") y Cells(2,3) son celdas o grupos de celdas. La diferencia está en cómo se les pide que hagan algo: con un punto y un método. Range("A1").Value = "Hola" escribe "Hola" en A1; Worksheets("Ventas").Activate trae la hoja "Ventas" al frente.

Objeto Qué representa Ejemplo
Application El propio Excel Application.ScreenUpdating = False
Workbooks("Ventas.xlsx") Un libro abierto por su nombre Workbooks("Ventas.xlsx").Close
Worksheets("Enero") Una hoja por su pestaña Worksheets("Enero").Delete
Range("A1:C10") Un rango por su dirección Range("A1:C10").Font.Bold = True
Cells(2, 3) Una celda por fila y columna Cells(2, 3).Value = 10

El editor de VBA: ventanas Proyecto, Propiedades y Código

Al abrir Alt+F11 ves tres ventanas útiles. La ventana Proyecto (arriba a la izquierda) muestra el árbol de libros y, dentro de cada uno, sus hojas y la carpeta Módulos con los archivos de código. La ventana Propiedades (abajo a la izquierda) enseña las propiedades del objeto seleccionado (el nombre de una hoja, por ejemplo). La ventana Código (a la derecha) es donde se escribe la macro. Una cuarta ventana, Inmediato (Ctrl+G en el editor), sirve para probar una línea suelta: escribes ?Range("A1").Value y al pulsar Entrar ves el valor de A1.

Los métodos que más se usan: .Value, .Formula, .Copy y .Paste

Método Qué hace Cuándo se usa
.Value Lee o escribe el valor de la celda Guardar o recuperar lo que hay escrito
.Formula Escribe la fórmula en inglés y con comas Que la celda calcule algo
.FormulaLocal Escribe la fórmula en español y con punto y coma Igual, pero local
.Copy / .Paste Copia y pega un rango Mover datos dentro o entre hojas
.ClearContents Borra el contenido sin tocar el formato Limpiar antes de un nuevo cálculo
.NumberFormat Cambia el formato de número Poner "#,##0.00" o "dd/mm/aaaa"
Cuidado: .Formula y .FormulaR1C1 siempre llevan la fórmula en inglés y con comas aunque tu Excel esté en español. Para escribir en español usa .FormulaLocal.

Tu primera macro grabada con la grabadora

Vamos a grabar una macro que da formato al informe de ventas de la hoja "Ventas": pone la fila 11 (la de totales) en negrita, aplica formato moneda a la columna E y deja el cursor en A1. La hoja de partida es esta:

A1fx**Fecha**
A B C D E
1 Fecha Vendedor Producto Unidades Precio
2 01/03/2026 Ana Cuaderno 10 3,20
3 02/03/2026 Luis Bolígrafo 25 1,50
4 03/03/2026 Ana Carpeta 8 4,75
5 04/03/2026 Marta Cuaderno 12 3,20
6 05/03/2026 Luis Carpeta 6 4,75
7 06/03/2026 Marta Bolígrafo 30 1,50
8 07/03/2026 Ana Cuaderno 4 3,20
9 08/03/2026 Luis Carpeta 9 4,75
10 09/03/2026 Marta Bolígrafo 15 1,50
11 TOTAL 119 227,20
Ventas

Grabar la macro paso a paso

  1. Abre la pestaña Programador (si no la ves, actívala como se explica arriba).
  2. Pulsa Programador > Código > Grabar macro.
  3. En el cuadro Grabar macro escribe el nombre FormatoVentas, deja Guardar macro en: en "Este libro" y como Método abreviado escribe Ctrl+Mayús+V. Pulsa Aceptar. El cursor se convierte en un pequeño casete: todo lo que hagas a partir de ahora se está grabando.
  4. Selecciona la fila 11 haciendo clic en su número de fila a la izquierda y pulsa Ctrl+N para ponerla en negrita.
  5. Selecciona el rango E2:E11, abre Ctrl+1 (Formato de celdas), elige Moneda con dos decimales y pulsa Aceptar.
  6. Haz clic en la celda A1 para dejar el cursor ahí.
  7. Vuelve a Programador > Código > Detener grabación (o al botón cuadrado que ha sustituido a Grabar macro).
ProgramadorCódigoGrabar macro
ProgramadorCódigoDetener grabación
Comprueba: al volver a la hoja, la fila 11 está en negrita, E2:E11 tiene formato moneda y el cursor está en A1.

Ejecutar la macro y revisar el código que generó

La macro ya está guardada en el libro. Puedes ejecutarla de dos maneras.

Ejecutar desde la cinta

  1. Ve a Programador > Código > Macros.
  2. Selecciona FormatoVentas en la lista y pulsa Ejecutar.

Ejecutar desde un botón en la hoja

F1fx**[Aplicar formato]**
A B C D E F
1 [Aplicar formato]
Ventas
  1. Ve a Insertar > Controles > Botón (en versiones antiguas: Programador > Controles > Insertar > Botón).
  2. Dibuja el rectángulo del botón sobre la celda F1 (más o menos).
  3. En el cuadro Asignar macro que aparece, elige FormatoVentas y pulsa Aceptar.
  4. Si quieres, cambia el texto del botón a "Aplicar formato" haciendo clic derecho sobre él.
Comprueba: al pulsar el botón, la fila 11 se pone en negrita, E2:E11 pasa a moneda y el cursor vuelve a A1.

Ahora abre Alt+F11, haz doble clic en Módulo1 dentro de la carpeta Módulos y verás el código que la grabadora ha escrito. Tiene esta pinta:

Sub FormatoVentas()
    Rows("11:11").Select
    Selection.Font.Bold = True
    Range("E2:E11").Select
    Selection.NumberFormat = "#,##0.00"
    Range("A1").Select
End Sub

Fíjate en la línea Selection.NumberFormat = "#,##0.00": es la que aplica el formato moneda. La grabadora usa Select y Selection porque imita tus clics, pero se puede reescribir sin ellas (más limpio, más rápido).

Escribir a mano una macro que rellena una hoja

La grabadora sirve para aprender los nombres de los objetos, pero escribir a mano te da control. Vamos a hacer una macro que recorra la hoja "Ventas" y calcule el total de cada fila (columna F), multiplicando unidades por precio. La hoja de partida es la misma del apartado anterior, sin la columna F.

F1fx**Total**
A B C D E F
1 Fecha Vendedor Producto Unidades Precio Total
2 01/03/2026 Ana Cuaderno 10 3,20
3 02/03/2026 Luis Bolígrafo 25 1,50
4 03/03/2026 Ana Carpeta 8 4,75
10 09/03/2026 Marta Bolígrafo 15 1,50
Ventas

Pulsa Alt+F11, abre Módulo1 y debajo del código de la grabadora escribe este otro:

Sub Recorrer()
    Dim i As Long
    For i = 2 To 10
        Cells(i, 6).Value = Cells(i, 4).Value * Cells(i, 5).Value
    Next i
End Sub

Para ejecutarlo, vuelve a Excel y pulsa Alt+F8, selecciona Recorrer y pulsa Ejecutar.

Comprueba: la columna F se rellena con 32,00 / 37,50 / 38,00 / 38,40 / 28,50 / 45,00 / 12,80 / 42,75 / 22,50.

El código, línea por línea

Sub Recorrer() y End Sub son obligatorios: encierran la macro y le dan nombre. Dim i As Long declara la variable i como un número entero largo, necesario porque las filas pueden pasar de 32.767. For i = 2 To 10 abre un bucle que va desde la fila 2 hasta la 10. Cells(i, 6).Value = Cells(i, 4).Value * Cells(i, 5).Value escribe en la columna 6 (F) el producto de la columna 4 (D, unidades) por la columna 5 (E, precio). Next i cierra el bucle y vuelve a la siguiente fila. Referencia: objetos básicos de VBA en Excel.

Acelerar la macro cuando hay muchas filas

Recorrer celda a celda con Cells es lento en hojas grandes porque Excel redibuja la pantalla en cada cambio. Se acelera con dos líneas: una al principio que apague la actualización de pantalla, y otra al final que la encienda.

Sub Recorrer()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 2 To 5000
        Cells(i, 6).Value = Cells(i, 4).Value * Cells(i, 5).Value
    Next i
    Application.ScreenUpdating = True
End Sub
Nota: pon siempre Application.ScreenUpdating = True antes de End Sub. Si la macro falla por un error y no llega a esa línea, Excel puede quedarse con la pantalla congelada hasta el siguiente reinicio.
Comprueba: en una hoja con 5.000 filas, la versión con ScreenUpdating = False tarda menos de la mitad que la versión sin esa línea.

Guardar y compartir el libro con macros sin perderlas

Una vez grabada la macro, guarda el libro con la extensión correcta.

  1. Pulsa F12 (Guardar como).
  2. En Tipo: elige *Libro de Excel habilitado para macros (.xlsm)**.
  3. Escribe el nombre (por ejemplo InformeVentas.xlsm) y pulsa Guardar.

Si lo guardas en .xlsx por error, Excel muestra un mensaje amarillo: "Las características siguientes no se pueden guardar en un libro sin macros: macros". Pulsa No, vuelve a Guardar como y elige .xlsm.

El bloqueo de macros al abrir un archivo descargado

Por seguridad, Excel bloquea las macros de los archivos descargados de internet o recibidos por correo. Al abrir el libro ves una barra amarilla con ADVERTENCIA DE SEGURIDAD: Las macros se han deshabilitado y un botón Habilitar contenido. Solo púlsalo si el archivo es de confianza y lo has descargado tú de una fuente segura.

Si el bloqueo no se quita con Habilitar contenido, hay otra vía: clic derecho sobre el archivo en el explorador de Windows > Propiedades > pestaña General > marca la casilla Desbloquear > Aceptar. A partir de ahí Excel ya no avisa. Más detalles en proteger archivos de Office.

Cuidado: nunca habilites macros de un archivo que no esperabas o de un remitente desconocido. Las macros pueden ejecutar código automáticamente.

Por qué la macro no hace lo que esperabas

Tres tropiezos típicos la primera vez.

El error "Sub o Function no definida" al ejecutar

La macro llama a un nombre que no existe. Causa: escribiste mal el nombre al ejecutarla, o la macro está en un módulo distinto del que esperabas. Arreglo: abre Alt+F8, mira la lista de macros disponibles y comprueba que coincides con el Sub que hay en el módulo. Si la macro no aparece, abre el editor con Alt+F11 y verifica que está dentro de Módulo1, Módulo2 o el que tenga tu proyecto.

La macro se ejecuta pero no cambia nada

La hoja donde corre ya no se llama "Ventas" porque la renombraste, o la macro apunta a una hoja que no es la activa. Arreglo: añade una línea al principio del Sub que asegure la hoja correcta, y selecciónala antes de tocar nada.

Sub Recorrer()
    Worksheets("Ventas").Activate
    Dim i As Long
    For i = 2 To 10
        Cells(i, 6).Value = Cells(i, 4).Value * Cells(i, 5).Value
    Next i
End Sub

Excel pide guardar como .xlsm aunque el libro ya lo era

La extensión del archivo cambió al abrirlo en una versión antigua que no entiende .xlsm y lo guardó como .xls o .xlsx. Arreglo: vuelve a F12 y guarda otra vez como *Libro de Excel habilitado para macros (.xlsm)**. Si el libro lo abriste en Excel 2003 o anterior, no hay solución directa: esas versiones no reconocen .xlsm.

Lo que tu libro macro no puede hacer

Las macros VBA son muy potentes en el escritorio, pero tienen tres límites que conviene conocer antes de compartir el archivo.

En Excel para la web (excel.cloud.microsoft / OneDrive) no se ejecutan macros VBA. Si subes un .xlsm a OneDrive y lo abres en el navegador, las macros están ahí pero no corren. La alternativa oficial de Microsoft para automatizar en la web son los Scripts de Office, que se programan en TypeScript y se graban desde la pestaña Automatizar.

En Excel para móviles (iPhone, iPad, Android) tampoco se ejecutan macros VBA. El archivo se abre, se ven las hojas y los datos, pero los botones de macro no hacen nada. Para móvil, la opción es reescribir la automatización con Scripts de Office o con Power Automate.

El editor VBA existe en Excel para Mac, pero algunas funciones de la librería de Windows (como Shell para lanzar programas) no están disponibles o tienen otro nombre. Si la macro la va a usar alguien en Mac, hay que probarla ahí antes de dar por bueno el archivo.

Desde qué versión existen las macros y el editor

Componente Dónde está
Editor de VBA (Alt+F11) Excel para Windows desde Excel 97; Excel para Mac desde Excel 98
Grabadora de macros Excel para Windows y Mac, todas las versiones de escritorio
Macros VBA en Excel para la web No disponible
Macros VBA en Excel para móviles No disponible
Pestaña Programador Hay que activarla manualmente en todas las versiones
Formato .xlsm Desde Excel 2007 (soporte terminado)

Lo que ya sabes hacer con un libro macro

  • Crear un archivo .xlsm desde Guardar como y entender por qué .xlsx no guarda macros.
  • Activar la pestaña Programador y grabar una macro con la grabadora, asignándole nombre y atajo.
  • Abrir el editor de VBA con Alt+F11, leer el código que ha escrito la grabadora y entender qué hace cada línea.
  • Ejecutar la macro desde la cinta Macros, con un atajo de teclado o con un botón dibujado en la hoja.
  • Compartir el archivo y desbloquear las macros en Propiedades cuando Excel las bloquea por seguridad.

El siguiente paso natural es escribir una macro que abra otro libro con Workbooks.Open, copie un rango de una hoja a otra con .Copy y .Paste, y cierre el libro de origen. Es el patrón que se usa para consolidar datos de varios archivos en uno solo, y solo necesitas los objetos Workbooks y Worksheets que ya has visto.

Fuentes

  1. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026
  2. MicrosoftProteger hoja y libro — documentación oficialconsultado el 13/10/2026
  3. MicrosoftLímites del libro — documentación oficialconsultado el 13/10/2026
  4. MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 13/10/2026
  5. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 13/10/2026