Una macro es una secuencia de acciones de Excel guardada para repetirla con un solo clic. En Excel 2016 se crea con la grabadora de macros o se escribe en Visual Basic (VBA), el lenguaje con el que se programan las tareas automáticas de Office. En este tutorial vas a completar y dar formato a un libro de ventas, guardarlo con su macro incluida y aprender a leer el código generado.
Las herramientas funcionan en Excel 2016 de Windows y de Mac. Si necesitas macros en un equipo con versiones posteriores, el mismo código se usa en Microsoft 365, Excel 2021 y Excel 2024; Excel para la web no ejecuta macros VBA.
=SI(A1>10;"Alto";"Bajo"). En un Excel configurado con punto decimal, como ocurre en México o Estados Unidos, se usa la coma. En VBA, las fórmulas que asigna .Formula se escriben siempre en inglés y con comas.Qué es una macro y qué problema resuelve en Excel 2016
En nuestro libro de ventas, cada semana llega una hoja con cinco operaciones. Hay que sumar la columna Importe, revisar los totales vacíos, dar formato a la cabecera, poner bordes y guardar el informe con el nombre del mes. Hacerlo a mano funciona, pero consume tiempo y deja lugar a olvidos.
Una macro guarda esa secuencia. En lugar de repetir los clics, ejecutas la macro y el libro queda listo. VBA es el lenguaje con el que se escriben esas instrucciones, y el editor de Visual Basic es el lugar donde se editan.
La macro más sencilla de este tutorial escribe un saludo en una celda:
Sub Saludo()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
Sub Saludo() inicia el procedimiento y End Sub lo termina. La línea de Range coloca el texto en A1. El MsgBox abre una ventana con el mensaje «Listo». Todavía no toca tus ventas, pero ya demuestra el patrón: una acción, un resultado y una señal para ti.
.xlsm desde el principio. Un archivo .xlsx no conserva macros.Dónde crear y ejecutar tu primera macro
La pestaña Programador viene oculta. Vamos a mostrarla para tener a mano la grabadora y el acceso al código.
- Abre Excel 2016 y entra en Archivo > Opciones.
- En la ventana de opciones, elige Personalizar cinta de opciones.
- En la lista de la derecha, marca la casilla Programador.
- Pulsa Aceptar para volver al libro.
Con la pestaña visible, abre el editor de Visual Basic y crea un módulo, que es el contenedor donde escribirás el código:
- Pulsa Alt+F11 para abrir el editor.
- En el menú Insertar, elige Módulo.
- En el panel de código, escribe el Sub.
- Pulsa F5 para ejecutarlo dentro del editor.
Para ejecutarlo desde Excel, utiliza Alt+F8, que abre la lista de macros. Selecciona Saludo y pulsa Ejecutar.
.xlsm antes de escribir la macro, o el código se perderá al guardar.Escribir y ejecutar un Sub en el editor de VBA
En el módulo pega este código. El punto y coma no se usa entre instrucciones: cada línea es una orden independiente.
Sub Saludo()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
Pulsa F5. En Excel verás el mensaje «Listo» y, al cerrarlo, la celda A1 con el texto Hola.
Listo
El resultado en la hoja queda así:
| A | B | C | |
|---|---|---|---|
| 1 | Hola |
Para ejecutarlo desde el libro, pulsa Alt+F8, elige Saludo y pulsa Ejecutar. La guía oficial explica este recorrido en Inicio rápido: Crear una macro.
Grabar una macro para aprender los nombres de Excel
Escribir una macro desde cero exige conocer los nombres de los objetos: hojas, rangos, formatos. La grabadora te los da.
- En la hoja Ventas, selecciona A1:D6.
- En Programador > Código, pulsa Grabar macro.
- Escribe el nombre FormatearVentas y pulsa Aceptar.
- Aplica negrita a la cabecera y un borde inferior.
- En Programador > Código, pulsa Detener grabación.
- Pulsa Alt+F8, selecciona FormatearVentas y pulsa Editar.
El editor mostrará líneas parecidas a estas:
Sub FormatearVentas()
Range("A1:D1").Font.Bold = True
Range("A1:D6").Borders(xlEdgeBottom).LineStyle = xlContinuous
End Sub
Ahí aparecen Range, Font y Borders. Ese es el valor de la grabadora: no adivinas la sintaxis, la lees.
Tu primera macro: completar una hoja de ventas
Partimos de la hoja Ventas. Tiene cinco operaciones; la columna Total está vacía y hay que completarla.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Importe | Total |
| 2 | Cuaderno | 2 | 12,00 | |
| 3 | Boli | 5 | 3,50 | |
| 4 | Folder | 3 | 9,00 | |
| 5 | Goma | 10 | 2,00 | |
| 6 | Lapiz | 4 | 6,00 |
El Total de cada línea es Importe por Cantidad: 24,00; 17,50; 27,00; 20,00 y 24,00. La suma general es 112,50.
- Abre el editor con Alt+F11 y crea un módulo con Insertar > Módulo.
- Escribe la macro que completa la columna.
- Pulsa F5 para ejecutarla.
Sub CompletarTotales()
Range("D2:D6").Formula = "=C2*B2"
Range("D2:D6").NumberFormat = "#,##0.00"
End Sub
Escribir valores y fórmulas con VBA
Hay una diferencia clave entre valor y fórmula. Value coloca un dato fijo; Formula escribe una expresión que Excel calcula y que se actualiza si cambian sus referencias.
En este libro, el Total debe depender de Cantidad e Importe, así que corresponde una fórmula:
Range("D2").Formula = "=C2*B2"
Como la fórmula se escribe una vez en D2, conviene copiarla hacia abajo. Esta línea hace las dos cosas:
Range("D2").Formula = "=C2*B2"
Range("D2").AutoFill Destination:=Range("D2:D6")
Para leer lo que ya existe, usa Value:
Dim producto As String
producto = Range("A2").Value
.Formula, la fórmula va en inglés y con comas. Es decir: "=C2*B2". Si necesitas la sintaxis en español del cuadro de fórmulas de tu Excel, la alternativa es .FormulaLocal con punto y coma.Leer celdas y recorrer un rango con un bucle
El Total está resuelto. Ahora want comprobar que la suma sale bien sin leer celdas una por una. Un bucle For Each recorre el rango y acumula los importes.
Sub SumarVentas()
Dim celda As Range
Dim total As Double
For Each celda In Range("C2:C6")
total = total + celda.Value
Next celda
MsgBox "Total de ventas: " & total
End Sub
Pulsa F5 y aparecerá una ventana con el resultado:
Total de ventas: 32,5
El total sale 32,50 porque la columna Importe ya contiene el resultado de multiplicar Cantidad por precio unitario: 12,00 + 3,50 + 9,00 + 2,00 + 6,00. La suma de la columna Total, multiplicada por las cantidades, es 112,50.
Guardar el resultado en un archivo .xlsm
Las macros viven dentro del libro. Si guardas en .xlsx, desaparecen.
- Pulsa F12 o ve a Archivo > Guardar como.
- Elige la carpeta donde está el libro.
- En Tipo, selecciona Libro de Excel habilitado para macros.
- Ponle nombre
Ventas_Octubre.xlsmy pulsa Guardar.
Los formatos están explicados en la ayuda oficial sobre formatos de archivo. Si tu Excel muestra la extensión en el nombre, acepta el aviso que pide conservarla.
Automatizar una tarea repetida de principio a fin
Ahora juntamos el trabajo: la cabecera con formato, bordes en toda la tabla y la columna Total sin huecos. Esta macro deja el informe presentable en un solo paso.
Sub TerminarInforme()
Dim celda As Range
Range("A1:D1").Font.Bold = True
Range("A1:D1").Interior.Color = RGB(221, 235, 247)
Range("A1:D6").Borders.LineStyle = xlContinuous
For Each celda In Range("D2:D6")
If IsEmpty(celda.Value) Then
celda.Formula = "=C2*B2"
End If
Next celda
Range("D2:D6").NumberFormat = "#,##0.00"
End Sub
El bucle solo rellena las celdas vacías: si una fila ya tiene Total, no la pisa. La hoja terminada queda así:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Importe | Total |
| 2 | Cuaderno | 2 | 12,00 | 24,00 |
| 3 | Boli | 5 | 3,50 | 17,50 |
| 4 | Folder | 3 | 9,00 | 27,00 |
| 5 | Goma | 10 | 2,00 | 20,00 |
| 6 | Lapiz | 4 | 6,00 | 24,00 |
Formatear rangos sin copiar código a mano
Un rango se escribe entre comillas y con dos puntos: Range("A1:D1") significa desde A1 hasta D1.
Range("A1:D1").Font.Bold = True
Range("A1:D1").Interior.Color = RGB(221, 235, 247)
Range("A1:D6").Borders.LineStyle = xlContinuous
Font.Bold controla la negrita, Interior.Color el fondo y Borders.LineStyle los bordes. Con RGB eliges el color usando los valores de rojo, verde y azul.
Para no repetir la misma línea en todas las macros, agrupa el código en un procedimiento auxiliar:
Sub AplicarEncabezado()
Range("A1:D1").Font.Bold = True
Range("A1:D1").Interior.Color = RGB(221, 235, 247)
End Sub
Y llámalo desde la macro principal con Call AplicarEncabezado. Así, si mañana la cabecera tiene cuatro columnas más, cambias el rango en un solo sitio.
Usar el grabador para obtener nombres de objetos
Para una acción larga, grabarla es más rápido que escribirla.
- Selecciona A1:D6.
- En Programador > Código, pulsa Grabar macro.
- Ponle nombre FormatoInforme y acepta.
- Cambia el color de relleno de la cabecera y añade un borde grueso.
- Pulsa Detener grabación.
- Abre la macro con Alt+F8 > Editar.
El código generado usa referencias que se Ved a primera vista. Pero tiene una debilidad: si borras la fila 2 o insertas una fila, las referencias quedan desplazadas. La versión edited con Range("A1:D1") sigue siendo más estable.
Ordena las líneas así: primero la cabecera, después los bordes, después el bucle que rellena los totales y al final el formato numérico. Esa secuencia es la que usaste en TerminarInforme.
Cuándo Excel 2016 no ejecuta la macro
Una macro puede fallar antes de ejecutar: Excel bloquea el archivo, el código tiene un error de compilación o el equipo donde la abres no tiene lo mismo que el tuyo.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Importe | Total |
| 2 | Cuaderno | 2 | 12,00 | 24,00 |
| 3 | Boli | 5 | 3,50 | 17,50 |
| 4 | Folder | 3 | 9,00 | 27,00 |
| 5 | Goma | 10 | 2,00 | 20,00 |
| 6 | Lapiz | 4 | 6,00 | 24,00 |
Macros bloqueadas en archivos descargados
Qué ves: el archivo se abre, pero el contenido no tiene cambios y aparece una barra con un aviso de que las macros están bloqueadas. En algunos equipos, el botón «Habilitar contenido» aparece en esa barra.
La causa: Excel bloquea por seguridad los archivos con macros descargados de internet o recibidos por correo hasta que el usuario los desbloquea.
El arreglo:
- Cierra el archivo.
- Haz clic con el botón derecho sobre él en el Explorador de archivos.
- Elige Propiedades.
- En la pestaña General, marca Desbloquear, si aparece.
- Pulsa Aplicar y vuelve a abrirlo.
La documentación oficial de VBA en Office explica el trabajo con el editor y los libros habilitados para macros.
El error de compilación al ejecutar
Qué ves: al pulsar F5, aparece un cuadro con el mensaje «Error de compilación: Se esperaba: expresión». O bien «Error de compilación: Sub o Function no definida».
La causa: al editar el código, una instrucción quedó fuera del Sub, falta un End Sub o un texto del MsgBox perdió las comillas.
El arreglo: revisa que cada bloque empiece con Sub Nombre() y termine con End Sub, y que las cadenas entre comillas sean cadenas. Este código mal escrito provoca el primer aviso:
Sub Saludo()
Range("A1").Value = "Hola
MsgBox "Listo"
End Sub
Las dos comillas de «Hola» están incompletas. La versión correcta es:
Sub Saludo()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
Para localizar el punto exacto, coloca el cursor sobre la línea marcada y pulsa F9 para evaluar una parte o revisa el editor con los atajos de depuración. Si el mensaje nombra una función que no reconoces, revisa su ortografía.
La macro funciona en tu equipo y no en otro
Qué ves: en el otro equipo la macro no aparece en la lista, o se ejecuta y falla al leer un archivo.
La causa: el código depende de recursos locales. Puede buscar una ruta como C:\Informes\Ventas que en el otro equipo no existe, o usar una biblioteca que no está instalada. También ocurre si el archivo se guardó en .xlsx y el código se perdió.
El arreglo: guarda el libro como .xlsm, comparte también los archivos que la macro necesita y confirma que la otra instalación tiene Excel 2016 con VBA habilitado. Si el código abre rutas fijas, usa ThisWorkbook.Path para construir la ruta a partir de la ubicación del libro:
Dim rutaInforme As String
rutaInforme = ThisWorkbook.Path & "\Informe_ventas.xlsx"
Qué puede automatizar Excel 2016 con VBA
La grabadora cubre muy bien las tareas que repites dentro de Excel: aplicar formatos, cambiar colores, aplicar filtros, copiar rangos, insertar filas y generar archivos. El código VBA amplía ese alcance porque puede tomar decisiones, recorrer miles de filas y reaccionar a lo que encuentra.
- Informes: formatear cabeceras, completar columnas y preparar la hoja para imprimir.
- Datos limpios: corregir celdas vacías, uniformar formatos y convertir resultados en una salida ordenada.
- Archivos: guardar copias con nombres como el mes, exportar hojas y combinar documentos.
- Navegación y filtros: seleccionar tablas, aplicar criterios y mover el foco a la zona que interesa.
- Formularios propios: recoger datos con cuadros de diálogo antes de procesarlos.
Sub GuardarCopiaMensual()
Dim mes As String
mes = Format(Date, "mmmm")
ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\Ventas_" & mes & ".xlsm"
End Sub
Esta macro deja una copia del libro con el nombre del mes en la misma carpeta.
Hay límites que conviene tener presentes. La grabadora registra lo que hiciste, no interpreta la intención: no adivina qué celdas son importantes. Y el sistema operativo, la web o Access quedan fuera del alcance de una macro de hoja de cálculo; para tocar el sistema, consultar la web o trabajar con bases de datos necesitas código adicional.
Lo que ya sabes hacer con las macros de Excel 2016
- Crear una macro desde cero en el editor de VBA y ejecutarla con Alt+F8 o F5.
- Grabar acciones repetitivas para descubrir los nombres de celdas, rangos y formatos.
- Escribir valores con
.Valuey fórmulas con.Formula, y recorrer rangos con For Each. - Formatear rangos, completar celdas vacías y guardar el libro como
.xlsm. - Diagnosticar macros bloqueadas, errores de compilación y problemas de portabilidad.
Tu siguiente paso es abrir tu propio libro de trabajo, elegir la tarea que repites cada semana y convertirla en un primer Sub de tres líneas. Los datos de este tutorial están comprobados en octubre de 2026.
Dudas al crear macros en Excel 2016
1. ¿Cómo habilitar las macros en Excel?
Abre Archivo > Opciones > Personalizar cinta de opciones y activa la casilla Programador para mostrar esa pestaña. Después, desde el grupo Código, puedes grabar una macro o abrir el editor de VBA con Alt+F11. Si el archivo llegó por descarga, desbloquea las macros desde sus Propiedades.
2. ¿Qué ejemplos de macros de Excel puedo probar?
En el tutorial se crean tres: una que escribe Hola y muestra un mensaje, otra que completa la columna Total de una hoja de ventas y una tercera que suma importes con un bucle For Each. Todas usan el editor de VBA y puedes copiarlas en un módulo nuevo.
3. ¿Cómo hacer una macro en Excel con botones?
Primero crea la macro y después asígnale un botón de formulario o de ActiveX. Para hacerlo, abre Insertar > Formas > Botón, dibújalo en la hoja y, en el cuadro Asignar macro, selecciona la macro que acabas de escribir.
4. ¿Qué es una macro en Excel?
Es una acción o un conjunto de acciones que puedes guardar y repetir con un solo clic. Puede grabarse con la grabadora de macros o escribirse con VBA en el editor. En este tutorial se usa para completar y dar formato a una hoja de ventas.
5. ¿Cómo hacer una macro en Excel desde cero?
Activa la pestaña Programador, abre el editor con Alt+F11 y crea un módulo con Insertar > Módulo. Escribe un Sub, termina con End Sub y ejecútalo con Alt+F8 desde Excel o con F5 dentro del editor.
6. ¿Para qué sirve una macro en Excel?
Sirve para automatizar tareas repetitivas: copiar datos, aplicar formatos, filtrar, generar informes y guardar archivos. En este libro de ventas, una macro completa la columna Total, formatea la cabecera y deja el informe listo para archivar.
7. ¿Cómo crear una macro en Excel para ingresar datos?
Graba la entrada de datos con Programador > Grabar macro y detén la grabación cuando termines. El código generado conserva los nombres de las hojas y los rangos; después puedes editarlo para repetir la entrada en otros registros.
Fuentes
- MicrosoftMacros no longer working in Excel 2016 | Microsoft Community Hubconsultado el 28/10/2026
- MicrosoftGetting started with VBA in Office | Microsoft Learnconsultado el 28/10/2026
- MicrosoftExcel 2016 — documentación oficialconsultado el 28/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 28/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 28/10/2026