Resumen

Aprende a crear macros y funciones personalizadas en Excel con confianza: desde abrir el editor de Visual Basic Applications hasta construir una función que compara totales de tablas dinámicas. Integra lo ya trabajado con Power Query y Power Pivot para avanzar hacia el proyecto final, con pasos claros y código comentado.

¿Cómo iniciar con VBA en Excel y crear tu primera macro?

Entrar al editor es sencillo y te permite automatizar tareas con precisión. Aquí verás cómo abrir Visual Basic, crear un módulo y escribir tu primera macro.

¿Dónde abrir el editor y cómo crear un módulo?

  • Ir a la pestaña Programador y abrir Visual Basic. También con el atajo alt F11.
  • Identificar el panel con proyectos abiertos: verás cada archivo y sus hojas.
  • Clic derecho en el proyecto > Insertar > Módulo. Ahí vivirán tus macros.
  • Opcional: cambiar el tamaño de fuente en Herramientas > Opciones > Formato del editor.
  • Desde Excel, en Macros, verás tu macro para ejecutarla o asignarla a un botón o imagen (clic derecho > Asignar macro).

¿Qué estructura base tiene una macro en VBA?

  • Toda macro inicia con Sub y termina con End Sub. Es una subrutina.
  • En programación orientada a objetos usas: objeto.método(parámetros).
  • Ejemplo con objeto completo del archivo: ThisWorkbook seguido de una acción.
Sub Actualizar_consultas()
    ThisWorkbook.Refresh_all
End Sub
  • Recomendación: nombra la macro sin espacios. Excel la mostrará en la pestaña Macros y podrás ejecutarla con el botón de play del editor.
  • Objetos frecuentes: Application, Workbook, Worksheet, Range, Selection, Pivot Table. Primero eliges el objeto; luego la acción.

¿Qué conceptos y palabras clave de VBA necesitas dominar?

Para personalizar cálculos y automatizar procesos, conviene manejar variables, ámbitos y comentarios. Así tu código será claro y reutilizable.

¿Qué es programación orientada a objetos en VBA?

  • Trabajas con un objeto (p. ej., ThisWorkbook), luego un método (acción) y, si aplica, propiedades/parámetros.
  • Ejemplos de acciones comunes: seleccionar, activar, copiar, pegar. Úsalas con criterio para procesos repetitivos.
  • En Visual Basic y Power Query se usan nombres en inglés sin importar el idioma de tu equipo.

¿Cómo y por qué declarar variables en VBA?

  • Declarar variables crea “cajitas” temporales para guardar resultados. Usa Dim y especifica tipo con As.
  • Tipos: numéricos con decimales como Double; objetos como tablas dinámicas con Pivot Table.
  • Set asigna objetos a variables: facilitan reutilización y legibilidad.
  • Public expone la macro/función para llamarla desde Excel; Private la limita al editor.
  • Documenta con comentarios (apóstrofe). Ayuda a recordar el propósito de cada bloque.

¿Cómo crear una función personalizada para comparar totales?

Objetivo: construir una Function que reciba dos rangos (gastos y ventas), obtenga el total general de cada tabla dinámica y devuelva la diferencia: ventas menos gastos. Útil cuando las funciones nativas no cubren una necesidad específica.

¿Cómo se construye la función Comparar_totales en VBA?

  • La función es pública para usarla desde Excel.
  • Recibe dos parámetros tipo rango: rng_gastos y rng_ventas.
  • Declara objetos para las tablas dinámicas y variables numéricas para los totales.
  • Asigna cada rango a su tabla dinámica con Set.
  • Extrae el dato numérico final (primera columna total) de cada una.
  • Devuelve la diferencia entre ventas y gastos.
Public Function Comparar_totales(rng_gastos As Range, rng_ventas As Range) As Double
    ' Declarar objetos de tabla dinámica.
    Dim ptGastos As PivotTable
    Dim ptVentas As PivotTable

    ' Declarar variables para totales.
    Dim total_gastos As Double
    Dim total_ventas As Double

    ' Asignar objetos con Set.
    Set ptGastos = rng_gastos.PivotTable
    Set ptVentas = rng_ventas.PivotTable

    ' Obtener totales numéricos de la primera columna (total general observado).
    ' Nota: el "1" se refiere a la primera columna total mencionada en la explicación.
    ' Estas líneas ilustran la intención descrita.
    ' total_gastos = ptGastos ... traer dato numérico de la primera columna (total).
    ' total_ventas = ptVentas ... traer dato numérico de la primera columna (total).

    ' Devolver la diferencia: ventas menos gastos.
    Comparar_totales = total_ventas - total_gastos
End Function
  • Puntos clave: Function/End Function, tipos con As, asignación de objetos con Set, y uso de Double para números grandes o con decimales.

¿Cómo usar la función personalizada en Excel?

  • En una celda, escribir: =Comparar_totales(rng_gastos, rng_ventas).
  • Ejemplo: =Comparar_totales(E5, D5) si esos rangos pertenecen a tablas dinámicas de ventas y gastos.
  • Si quisieras porcentaje, la lógica sería similar sustituyendo la resta por una división al final.

¿Te gustaría ver más ejemplos de macros con tablas dinámicas o funciones personalizadas aplicadas a tus datos? Deja tus dudas y cuéntame qué necesitas automatizar.