Macros en Excel: grabar, entender y limpiar el código VBA

Editor de Visual Basic para Aplicaciones de Excel con el procedimiento ActualizarInforme, que refresca las consultas, recalcula las tablas dinámicas y exporta a PDF

Las macros en Excel sirven para que lo que se repite cada mes ocurra con un clic. Grabar una es cuestión de minutos y no exige saber programar; entender lo que la grabadora escribió y limpiarlo es lo que separa una macro que aguanta un año de otra que se rompe la primera vez que alguien cambia de hoja. Esta guía recorre las dos cosas.

Está escrita en dos niveles. Si nunca ha grabado una macro, empiece por la grabadora y por cómo guardar el archivo para que el código no se pierda. Si ya escribe algo de VBA, encontrará la parte técnica: estructura de un procedimiento, recorrer una tabla, la seguridad de macros y cuándo conviene no usar VBA en absoluto.

Dónde encaja esta guía

Es la tercera de siete guías sobre Microsoft 365 construidas sobre el mismo conjunto de datos: un registro de tickets de soporte. En la primera se convirtió en la tabla tblTickets; en la segunda se resumió con tablas dinámicas. Aquí ese trabajo mensual se automatiza.

  1. Tablas en Excel — preparar y limpiar los datos.
  2. Tablas dinámicas — resumir esos datos en segundos.
  3. Macros en Excel — está leyéndola: automatizar lo que se repite.
  4. Estilos en Word — construir el informe con índice y referencias cruzadas.
  5. Combinar correspondencia — enviar a cada área su parte.
  6. Patrón de diapositivas — la plantilla de la presentación.
  7. Vincular Excel con PowerPoint — que el gráfico siga al dato.

Qué son las macros en Excel

Una macro es una secuencia de instrucciones guardada dentro del libro, escrita en un lenguaje llamado VBA (Visual Basic para Aplicaciones). Cuando se ejecuta, Excel hace exactamente lo que la secuencia dice, en el mismo orden y a la misma velocidad de la máquina.

Las macros de Excel sirven para lo repetitivo y determinista. La prueba para saber si algo merece una macro son tres preguntas: ¿se repite al menos una vez al mes?, ¿los pasos son siempre los mismos?, ¿alguien se equivoca de vez en cuando al hacerlo? Con dos síes, compensa.

Antes de empezar: la pestaña y el formato del archivo

Activar la pestaña Programador

Viene oculta. Vaya a Archivo > Opciones > Personalizar cinta de opciones y marque Programador en la columna de la derecha. Ahí viven la grabadora, el editor de VBA y la seguridad de macros.

Guardar como .xlsm, o las macros de Excel desaparecen

🔴 Esta es la trampa que más tiempo ha costado a más gente. El formato .xlsx no puede contener código. Si guarda un libro con macros en .xlsx, Excel avisa una vez con un cuadro que casi nadie lee, y al aceptar borra todas las macros. No hay deshacer.

ExtensiónContiene macrosPara qué
.xlsxNoLibros normales
.xlsmLibros con macros. El que necesita aquí
.xlsbBinario: más rápido y ligero, menos compatible
.xltmPlantilla con macros
.xlamComplemento que se carga en todos los libros

Seguridad y ubicaciones de confianza

Microsoft bloquea por defecto las macros de archivos descargados de internet, y lo hace con razón: durante años fueron una vía de entrada habitual de programas maliciosos. La forma correcta de trabajar no es bajar la seguridad global, sino declarar una carpeta como ubicación de confianza en Archivo > Opciones > Centro de confianza y guardar allí los libros propios.

⚠️ Si un archivo llega por correo y pide «habilitar contenido», la respuesta por defecto es no. Una macro puede hacer todo lo que puede hacer el usuario que la ejecuta, incluido borrar archivos.

Grabar la primera macro de Excel

  1. Programador > Grabar macro.
  2. Póngale un nombre sin espacios, por ejemplo ActualizarInforme.
  3. Deje «Guardar macro en: Este libro».
  4. Haga los pasos tal como los haría normalmente.
  5. Programador > Detener grabación.
  6. Pruébela con Alt + F8.

Dos consejos que evitan la mayoría de los fallos. Primero, ensaye los pasos antes de grabar: la grabadora registra también los errores y las correcciones. Segundo, no use el ratón para seleccionar celdas si puede evitarlo; use nombres de tabla, porque el clic graba una coordenada fija que mañana estará en otro sitio.

Leer y limpiar lo que escribió la grabadora

Pulse Alt + F11 para abrir el editor donde viven las macros de Excel. El código estará dentro de Módulos. Lo que la grabadora produce funciona, pero es verboso y frágil, porque describe clics en lugar de intenciones.

' Lo que graba la grabadora
Sheets("Resumen").Select
Range("A1").Select
Selection.Copy
Sheets("Informe").Select
Range("A1").Select
ActiveSheet.Paste

' Lo mismo, sin seleccionar nada
Hoja2.Range("A1").Copy Destination:=Hoja3.Range("A1")

La regla es sencilla: casi nunca hace falta Select ni Activate. Quitarlos hace el código más corto, mucho más rápido y, sobre todo, independiente de qué hoja esté abierta cuando alguien pulse el botón.

La estructura de un procedimiento

Sub ActualizarInforme()

    Dim pt As PivotTable
    Dim ruta As String

    Application.ScreenUpdating = False

    ' 1. refrescar Power Query y el modelo de datos
    ThisWorkbook.RefreshAll

    ' 2. recalcular cada tabla dinámica de la hoja Resumen
    For Each pt In Hoja2.PivotTables
        pt.PivotCache.Refresh
    Next pt

    ' 3. exportar el resumen a PDF con la fecha en el nombre
    ruta = ThisWorkbook.Path & "\Informe-" & Format(Date, "yyyy-mm") & ".pdf"
    Hoja2.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta

    Application.ScreenUpdating = True
    MsgBox "Informe generado en " & ruta, vbInformation

End Sub
ElementoQué hace
Sub … End SubDelimita el procedimiento
DimDeclara una variable y su tipo
ScreenUpdating = FalseCongela la pantalla: multiplica la velocidad
ThisWorkbookEl libro que contiene el código, pase lo que pase
Hoja2El nombre de código de la hoja, que no cambia si la renombran
For Each … NextRepite sobre cada elemento de una colección
' comentarioTexto que VBA ignora y que el siguiente agradece

Hay un detalle en esa tabla que ahorra incidentes: usar Hoja2 en vez de Sheets("Resumen"). El primero es el nombre interno y sobrevive a que alguien renombre la pestaña; el segundo se rompe en cuanto alguien escribe «Resumen 2026».

Recorrer una tabla con macros en Excel

Como los datos están en la tabla tblTickets, VBA puede recorrerla por nombre sin saber cuántas filas tiene. Este procedimiento cuenta los tickets críticos y suma sus horas:

Sub ResumenCriticos()

    Dim lo As ListObject
    Dim fila As ListRow
    Dim n As Long, horas As Double

    Set lo = Hoja1.ListObjects("tblTickets")

    For Each fila In lo.ListRows
        If fila.Range(1, lo.ListColumns("Prioridad").Index) = "Crítica" Then
            n = n + 1
            horas = horas + fila.Range(1, lo.ListColumns("Horas").Index)
        End If
    Next fila

    MsgBox n & " tickets críticos, " & horas & " horas", vbInformation

End Sub

Con nuestro conjunto de datos el resultado es 3 tickets críticos y 13 horas. Fíjese en ListColumns("Horas").Index: la columna se localiza por su nombre, así que insertar una columna nueva en medio no rompe nada. Es la misma idea de las referencias estructuradas, llevada a VBA.

Asignar la macro de Excel a un botón

Que la macro exista no basta: hay que ponerla al alcance de quien la va a usar, que casi nunca sabe qué es Alt + F8.

  1. Inserte una forma desde Insertar > Formas y escríbale «Actualizar informe».
  2. Haga clic derecho sobre ella y elija Asignar macro.
  3. Seleccione ActualizarInforme y acepte.

La alternativa más discreta es añadir la macro a la barra de acceso rápido desde Opciones > Barra de herramientas de acceso rápido > Macros, que la deja disponible en todos los libros abiertos.

Errores frecuentes con macros en Excel

ErrorCausaSolución
Las macros desaparecieronEl libro se guardó como .xlsxGuardar siempre como .xlsm
«No se puede ejecutar la macro»Archivo fuera de una ubicación de confianzaDeclarar la carpeta como de confianza
Error 1004 al copiarLa macro depende de la hoja activaQuitar Select y referenciar la hoja
Va lentísimaFalta ScreenUpdating = FalseCongelar pantalla y cálculo durante el proceso
Funciona en un equipo y no en otroReferencias a rutas locales o a versionesUsar ThisWorkbook.Path
Se rompió al renombrar una hojaSe usó Sheets("Nombre")Usar el nombre de código, Hoja2
El botón no hace nadaLa macro está en otro libroGuardar la macro en «Este libro»

Cuándo no usar macros en Excel

Las macros en Excel se escriben en VBA, una tecnología de los años noventa que Microsoft mantiene por compatibilidad, y no siempre es la mejor respuesta. Tres alternativas cubren hoy buena parte de lo que antes exigía una macro.

HerramientaPara qué es mejorLímite
Power QueryTransformar y combinar datos de forma repetibleNo hace interfaz ni envía correos
Office ScriptsAutomatizar en Excel para la web, en TypeScriptExige licencia de empresa y no hay VBA
Power AutomateEncadenar aplicaciones: Excel, Outlook, SharePointDepende de la nube y de los conectores
VBAEscritorio, control fino de Excel, sin conexiónNo funciona en la web ni en el móvil

La regla práctica: si el trabajo es transformar datos, Power Query antes que VBA. Si hay que saltar entre aplicaciones, Power Automate. VBA sigue ganando cuando todo ocurre dentro de Excel de escritorio y hace falta un control que las otras no dan.

Preguntas frecuentes sobre macros en Excel

¿Hay que saber programar para usar macros en Excel?

Para grabar macros de Excel y ejecutarlas, no. Para que sobrevivan a un cambio de hoja o de columna, conviene entender lo básico: qué es una variable, qué hace un bucle y por qué Select sobra. Es un día de aprendizaje que se amortiza muy rápido.

¿Funcionan en Excel para la web o en el móvil?

No. VBA solo existe en Excel de escritorio para Windows y macOS. En la web el equivalente son Office Scripts, que es otro lenguaje y hay que reescribir.

¿Se puede deshacer lo que hizo una macro?

No. Ejecutar una macro vacía la pila de deshacer. Por eso conviene probarla siempre sobre una copia del archivo, y que el primer paso de cualquier macro destructiva sea guardar una copia.

¿Cómo depuro una macro que falla?

En el editor, pulse F8 para ejecutarla línea a línea y observe cómo cambian los valores. Añada Debug.Print para escribir valores en la ventana Inmediato, que se abre con Ctrl + G. Con esas dos herramientas se resuelve casi todo.

¿Son un riesgo de seguridad?

Las propias, hechas en casa y guardadas en una carpeta de confianza, no. Las que llegan de fuera, sí, y por eso Microsoft las bloquea por defecto. La política sensata en una empresa es permitir macros firmadas o ubicadas en carpetas controladas, y bloquear el resto.

El siguiente paso de la serie

Con los datos limpios, resumidos y el proceso automatizado, el trabajo en Excel está hecho. Lo que falta es contarlo: la cuarta guía arma el informe en Word con estilos, índice automático y referencias cruzadas que no se desfasan.

En KHARONTE administramos Microsoft 365 y los equipos donde se ejecutan estos archivos, con la mesa de servicio detrás para cuando algo deja de funcionar.

Compartir este artículo

Últimas entradas

Escríbanos ahora