Crear macros y funciones en Excel con VBA
Clase 12 de 20 • Curso de Excel Avanzado
Contenido del curso
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.