Crear una macro simple VBA en Excel para automatizar una tarea

Evaluez cet article !
[Total: 0 Moyenne : 0]


Crear una macro simple VBA en Excel para automatizar una tarea

Tienes una tarea repetitiva en Excel — formatear una tabla, eliminar filas vacías, aplicar formatos o consolidar datos — y estás cansado de repetir las mismas manipulaciones. Una macro VBA permite automatizar estos gestos en pocos segundos. Este artículo te guía paso a paso para crear una macro simple, entender el código generado, adaptarlo a tus necesidades y evitar los errores comunes, sin suponer que eres desarrollador.

En resumen

🔧 Objetivo: automatizar una tarea repetitiva en Excel mediante una macro VBA simple — grabar la acción, corregir el código y luego ejecutarlo cuando sea necesario.

⚙️ Pasos clave: activar la pestaña Desarrollador, guardar el libro (.xlsm), grabar o escribir el código, probar y asegurar la macro.

📁 Datos fuente: si tus datos provienen de un archivo CSV, verifica los formatos antes de automatizar para evitar errores de tipo o de separador.

💡 Consejo práctico: prefiere una macro corta y legible; comenta el código para poder retomarlo fácilmente seis meses después.

¿Por qué automatizar con una macro VBA?

Automatizar no es solo ahorrar tiempo; también es reducir errores humanos y uniformizar el resultado. Cuando una tarea sigue siempre las mismas reglas (seleccionar un rango, ordenar, aplicar formatos, copiar y pegar resultados), la repetición genera olvidos: una columna no formateada, una fila olvidada durante el ordenamiento. Una macro ejecuta la secuencia de forma idéntica cada vez. Podrías pensar que la grabación es suficiente, pero a menudo es necesario entender y ajustar el código para hacerlo robusto frente a variaciones de datos.

Antes de comenzar: precauciones y preparación

Guardar y formato del archivo

Guarda tu libro en formato .xlsm (libro habilitado para macros) antes de grabar o pegar un código VBA. Esto evita perder macros y permite una recuperación fácil en caso de problema. Trabaja sobre una copia si automatizas operaciones destructivas (eliminar filas, sobrescribir celdas).

Activar la pestaña Desarrollador y la seguridad

La pestaña Desarrollador no está visible por defecto en Excel: actívala mediante opciones > Personalizar la cinta de opciones. En cuanto a seguridad, ajusta el centro de gestión de macros: prefiere « Deshabilitar todas las macros con notificación » para poder activar las macros confiables cuando sea necesario, y evita permitir automáticamente todas las macros provenientes de fuentes desconocidas.

Verificar los datos fuente

Antes de automatizar, examina tus datos: tipos de columnas (texto, número, fecha), separadores decimales, celdas combinadas. Si tus datos provienen de un archivo CSV, impórtalos correctamente y corrige los errores comunes — un separador incorrecto puede transformar un número en texto y hacer que la macro falle.

Elección del método: ¿grabar o programar?

Existen dos enfoques: usar el grabador de macros o escribir directamente código VBA. El grabador es rápido para capturar acciones simples y aprender la sintaxis, pero a menudo produce código verboso y dependiente de direcciones precisas. Escribir el código a mano requiere un poco de reflexión pero da una macro más limpia, adaptable y mantenible.

Método Ventajas Inconvenientes
Grabar la macro Rápido, accesible para principiantes Código verboso, frágil ante cambios de estructura
Escribir el código Flexible, optimizable, más robusto Curva de aprendizaje más elevada

Ejemplo práctico: macro para limpiar y formatear una tabla

Vamos a crear una macro simple que:

  • selecciona el rango utilizado;
  • elimina las filas vacías;
  • formatea el encabezado (negrita, fondo);
  • aplica un formato numérico a las columnas detectadas como números;
  • ajusta automáticamente el ancho de las columnas.

Esta secuencia de acciones es típica de un preprocesamiento antes de generar informes o exportar. Aquí está el código, que puedes pegar en el editor VBA (ALT+F11) en un módulo estándar:

Sub NettoyerEtFormaterTableau()
    Dim ws As Worksheet
    Dim plage As Range
    Dim derniereLigne As Long, derniereCol As Long
    Set ws = ActiveSheet

    ' Déterminer la plage utilisée
    With ws
        If Application.WorksheetFunction.CountA(.Cells) = 0 Then Exit Sub
        derniereLigne = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        derniereCol = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        Set plage = .Range(.Cells(1, 1), .Cells(derniereLigne, derniereCol))
    End With

    ' Supprimer les lignes entièrement vides
    Dim i As Long
    For i = derniereLigne To 1 Step -1
        If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then ws.Rows(i).Delete
    Next i

    ' Mettre en forme l'en-tête (première ligne)
    With plage.Rows(1).Font
        .Bold = True
    End With
    plage.Rows(1).Interior.Color = RGB(220, 230, 241)

    ' Appliquer un format numérique aux colonnes qui paraissent numériques
    Dim col As Long, sampleVal As Variant
    For col = 1 To derniereCol
        sampleVal = Application.WorksheetFunction.Index(ws.Columns(col).Value, 2, 1)
        If IsNumeric(sampleVal) Then
            ws.Columns(col).NumberFormat = "#,##0.00"
        End If
    Next col

    ' Ajuster les colonnes
    plage.Columns.AutoFit
End Sub

Explicación detallada del código

Las líneas iniciales definen la hoja y determinan el rango utilizado mediante el método Find, más fiable que UsedRange para ignorar celdas formateadas sin contenido. La eliminación de filas vacías se realiza en un bucle inverso para evitar desplazamientos de índice. El formato del encabezado usa Interior.Color para un fondo ligero; puedes reemplazar RGB por una constante de Excel si prefieres. La identificación de columnas numéricas se basa en una muestra (aquí la celda de la segunda fila), una técnica simple pero eficaz para evitar aplicar un formato numérico a una columna de identificadores que contienen ceros en el encabezado.

Adaptar la macro a otros contextos

La robustez proviene de pequeñas protecciones: verificar que la hoja no esté vacía, manejar posibles errores, documentar el código. Para evolucionar la macro hacia un uso multi-hojas, añade un paso que pida al usuario elegir la hoja o recorre todas las hojas del libro. Si tus datos se importan automáticamente, inserta el procedimiento de importación antes de la limpieza.

Cuadro de diálogo y ejecución con botón

Para hacer la macro accesible a usuarios no técnicos, puedes asociarla a un botón en la hoja (Insertar > Formas, luego asignar la macro) o crear un pequeño formulario de usuario (UserForm) para ingresar parámetros (rango, incluir/quitar eliminación de filas vacías, etc.).

Buenas prácticas y trampas a evitar

  • Comentar tu código: dos o tres palabras bastan para explicar cada bloque lógico. Te lo agradecerás después.
  • Probar en un conjunto de prueba antes de ejecutar sobre datos críticos.
  • Manejar errores: un simple On Error GoTo GestionError y un mensaje claro evitan fallos incomprensibles para el usuario.
  • Evitar referencias absolutas: usa métodos dinámicos (Find, CurrentRegion, Tablas nombradas) en lugar de Range(«A1:Z100»).

Tabla resumen: errores frecuentes y soluciones

Síntoma Causa frecuente Solución
La macro se detiene con error 13 (Tipo incompatible) Valor inesperado (texto vs número) Verificar tipos con IsNumeric / IsDate; añadir conversiones
Resultado diferente según la hoja Referencia a ActiveSheet no prevista Especificar ws = ThisWorkbook.Worksheets(«Nombre») o pedir la hoja
Columnas no ajustadas Formato condicional o celdas combinadas Quitar combinaciones, manejar formatos condicionales antes de AutoFit
Ejemplo de editor VBA y hoja Excel mostrando una macro para limpiar y formatear una tabla

FAQ

¿Cómo ejecutar una macro automáticamente al abrir el archivo?

Coloque un sub llamado Workbook_Open() en el módulo ThisWorkbook. Este procedimiento se ejecutará automáticamente al abrir el libro. Atención: evite realizar acciones riesgosas sin confirmación del usuario.

¿Cuál es la diferencia entre Sub y Function en VBA?

Un Sub ejecuta una serie de instrucciones sin devolver un valor; una Function devuelve un valor y puede usarse en una celda como una fórmula personalizada o llamarse desde un Sub.

La macro elimina datos, ¿puedo deshacer?

Excel no permite deshacer una macro (Ctrl+Z no funciona después de ejecutar un script). Para prevenir pérdidas, haga una copia de seguridad automática al inicio de la macro o use la funcionalidad de versionado de su entorno (OneDrive, SharePoint).

¿Se puede ejecutar una macro en varios archivos?

Sí, abriendo cada archivo vía VBA y aplicando el mismo procedimiento. Cree una macro «madre» que recorra una carpeta, abra cada archivo, ejecute la macro de limpieza y guarde el archivo.

Evaluez cet article !
[Total: 0 Moyenne : 0]
Lire aussi  Eliminar duplicados en Excel con un solo clic
Julie - auteure Com-Strategie.fr

Julie – Auteure & Fondatrice

Étudiante en journalisme et passionnée de technologie, Julie partage ses découvertes autour de l’IA, du SEO et du marketing digital. Sa mission : rendre la veille technologique accessible et proposer des tutoriels pratiques pour le quotidien numérique.

Deja un comentario