📖 Teoría: Macros en Excel
Haz clic en cada tema para expandirlo.
⚡ Comparativa de rendimiento: ¿macro o fórmula?
Toda tarea que se puede resolver con una fórmula nativa de Excel (SUMAR.SI, BUSCARV/BUSCARX, Tablas Dinámicas, Power Query...) tiene un costo de rendimiento mínimo: el motor de cálculo de Excel está optimizado exactamente para eso. Una macro VBA, en cambio, siempre tiene un costo — por eso solo debe usarse en casos extremadamente necesarios, cuando de verdad no hay otra forma de resolver la tarea.
| Recurso | Fórmula nativa | Macro VBA |
|---|---|---|
| Consumo de RAM | Mínimo | Alto (más con bucles largos) |
| Peso del archivo | Casi no aumenta | Aumenta (.xlsm, módulos, código) |
| Velocidad de cálculo | Optimizada por el motor de Excel | Depende del código; puede volverse lenta |
| Recálculo automático | Siempre activo | Se puede perder mientras corre la macro |
| Tiempo de cálculo | Prácticamente instantáneo | Aumenta con cada fila o bucle adicional |
📌 Una macro NO es un juguete ni un reemplazo cómodo de una fórmula. Úsala solo cuando la tarea sea imposible o demasiado tediosa de resolver con fórmulas, Tablas Dinámicas o Power Query — nunca "porque se ve más profesional". Su uso indebido castiga el rendimiento del archivo: más RAM, más peso, más lentitud y menos control sobre el recálculo.
Una macro es un conjunto de instrucciones automatizadas que Excel ejecuta de forma secuencial para realizar tareas repetitivas de manera rápida y sin errores. Se programan en el lenguaje VBA (Visual Basic for Applications), incluido en Microsoft Office.
- Automatizan tareas repetitivas (dar formato, copiar datos, generar reportes).
- Reducen errores humanos al estandarizar procesos.
- Se guardan en archivos
.xlsm(Excel habilitado para macros). - Pueden ejecutarse con un botón, atajo de teclado o al abrir el libro.
Grabadora de macros: Excel registra automáticamente cada acción del usuario (clics, formato, escritura) y la convierte en código VBA. Ideal para principiantes.
Escrita en VBA: El programador escribe el código directamente en el Editor de VBA. Permite lógica compleja, bucles, condiciones y manejo de errores que la grabadora no puede capturar.
- Grabar: Pestaña Desarrollador → Grabar Macro.
- Editor VBA: Alt + F11 abre el entorno de programación.
- Combinar ambos: grabar la estructura base y luego editar el código generado.
El Editor de Visual Basic (VBE) es el entorno donde se escribe, edita y depura el código de las macros. Se abre con Alt + F11.
- Explorador de proyectos: muestra la estructura del libro (hojas, módulos, formularios).
- Ventana de código: área principal donde se escribe el código VBA.
- Ventana Inmediato: ejecuta instrucciones rápidas y muestra
Debug.Print. - Módulos: contenedores de código reutilizable (Módulo1, Módulo2…).
- ThisWorkbook / Hoja1: código asociado a eventos del libro u hoja.
Sub (Subrutina): bloque de código que ejecuta acciones pero no devuelve un valor. Es el tipo más común de macro.
Sub NombreDeLaMacro()
' Instrucciones aquí
End Sub
Function (Función): similar a Sub pero devuelve un valor. Se puede usar como fórmula en una celda.
Function Doble(n As Double) As Double
Doble = n * 2
End Function
- Los nombres no pueden tener espacios ni empezar con números.
- Los paréntesis son obligatorios aunque no haya parámetros.
Las variables almacenan datos temporales en memoria mientras la macro se
ejecuta. Se declaran con Dim.
| Tipo | Descripción | Ejemplo |
|---|---|---|
Integer |
Entero pequeño (-32768 a 32767) | Dim edad As Integer |
Long |
Entero grande | Dim filas As Long |
Double |
Número decimal | Dim precio As Double |
String |
Texto | Dim nombre As String |
Boolean |
Verdadero / Falso | Dim activo As Boolean |
Variant |
Cualquier tipo (por defecto) | Dim dato As Variant |
Range |
Referencia a celda(s) | Dim celda As Range |
💡 Usar Option Explicit al inicio del módulo
obliga a declarar todas las variables, evitando errores.
VBA usa una jerarquía de objetos para referirse a las partes de Excel:
Application→ el programa Excel completo.Workbook→ un libro (archivo .xlsx / .xlsm).
Workbooks("Ventas.xlsm")|ThisWorkbookWorksheet→ una hoja del libro.
Worksheets("Enero")|ActiveSheetRange→ una celda o rango de celdas.
Range("A1")|Range("A1:C10")|Cells(1,1)
Worksheets("Hoja1").Range("B2").Value = "Hola"
If / Then / Else — toma decisiones según condiciones:
If Range("A1").Value > 100 Then
MsgBox "Mayor que 100"
ElseIf Range("A1").Value = 100 Then
MsgBox "Igual a 100"
Else
MsgBox "Menor que 100"
End If
For / Next — repite un bloque un número fijo de veces:
For i = 1 To 10
Cells(i, 1).Value = i * 2
Next i
Do While / Loop — repite mientras una condición sea verdadera:
Dim fila As Long
fila = 2
Do While Cells(fila, 1).Value <> ""
Cells(fila, 2).Value = Cells(fila, 1).Value * 1.19
fila = fila + 1
Loop
MsgBox muestra un mensaje al usuario. El segundo argumento
(opcional) elige el ícono del cuadro — no todos son iguales, cada uno
comunica algo distinto:
MsgBox "Los datos se guardaron correctamente.", _
vbInformation, "Listo"
MsgBox "Hay celdas vacías en la columna B. " & _
"Revísalas antes de continuar.", vbExclamation, "Atención"
MsgBox "No se pudo dividir: el denominador es cero.", _
vbCritical, "Error"
MsgBox "¿Deseas eliminar este registro? " & _
"Esta acción no se puede deshacer.", vbQuestion, "Confirmar"
💡 El texto de arriba de cada cuadro (fondo de color) es el TÍTULO — tercer argumento de MsgBox. El texto junto al ícono es el MENSAJE — primer argumento.
MsgBox también puede pedir una respuesta al
usuario combinando el ícono con botones (vbYesNo, vbOKCancel...)
con +, y capturando lo que se presionó:
Dim respuesta As VbMsgBoxResult
respuesta = MsgBox("¿Deseas eliminar este registro?", vbYesNo + vbQuestion, "Confirmar")
If respuesta = vbYes Then
MsgBox "Registro eliminado."
Else
MsgBox "Operación cancelada."
End If
InputBox pide al usuario que escriba un dato y lo
devuelve como texto.
Dim nombre As String
nombre = InputBox("¿Cuál es tu nombre?", "Registro")
Range("A1").Value = nombre
💡 A diferencia de MsgBox, InputBox
no tiene íconos configurables — siempre se ve igual, su función es recibir texto, no avisar nada.
El manejo de errores evita que la macro se detenga inesperadamente cuando ocurre un fallo.
Sub DividirNumeros()
On Error GoTo ManejadorError
Dim resultado As Double
resultado = 10 / 0 ' Error: división por cero
MsgBox "Resultado: " & resultado
Exit Sub
ManejadorError:
MsgBox "Error: " & Err.Description, vbCritical
End Sub
On Error GoTo Etiqueta— salta a una etiqueta cuando ocurre un error.On Error Resume Next— ignora el error y continúa (usar con cuidado).On Error GoTo 0— desactiva el manejador de errores actual.Err.NumberyErr.Descriptiondan información del error.
Excel bloquea macros por defecto por seguridad. Para habilitarlas:
- Archivo → Opciones → Centro de confianza → Configuración del Centro de confianza.
- Configuración de macros → seleccionar el nivel adecuado.
- Para libros propios: Habilitar todas las macros (solo en equipos de confianza).
- Guardar el archivo como .xlsm (no .xlsx) para conservar las macros.
⚠️ Nunca habilites macros de archivos desconocidos: pueden contener código malicioso.
💻 Simulador de Código VBA
40 ejemplos: del "Hola Mundo" a casos reales de oficina (consolidar hojas, duplicados, PDF, respaldo, correo por Outlook, tabla dinámica...). Cada uno muestra primero qué celdas llenar para que funcione, y luego el código. Selecciona uno para verlo.
📚 Diccionario VBA
Range("A1:C5")
Cells(2, 3) = celda C2.
Worksheets("Hoja1")
Dim total As Double
Range("A1").Value = 10
🎬 Videos: Macros en Excel (Ver curso completo de Macros)
🏋️ Ejercicios prácticos
Un ejercicio guiado por video: mira la explicación, sigue las instrucciones y practica con el archivo descargable.
Taller 8.1 — Qué es una macro y cómo activar el menú Programador en Excel
Qué hay que hacer:
- Mira el video completo antes de tocar nada en Excel.
- Con tus palabras, explica qué es una macro y para qué sirve (piensa en una tarea repetitiva que hagas siempre igual).
- Ve a Archivo > Opciones > Personalizar cinta de opciones y activa la casilla "Programador" (en algunas versiones se llama "Desarrollador").
- Ubica en la nueva pestaña Programador los botones "Grabar macro", "Macros" y "Seguridad de macros".
- Desbloquea la seguridad para poder ejecutar macros sin problemas: haz clic derecho sobre el archivo descargado > Propiedades > marca la casilla "Desbloquear" (abajo, junto a Seguridad) > Aceptar. Si al abrirlo aparece la barra amarilla "Advertencia de seguridad", pulsa "Habilitar contenido".
- Si la barra no aparece o quieres dejarlas habilitadas de una vez, ve a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros, y elige "Deshabilitar todas las macros con notificación" (recomendado) o "Habilitar todas las macros" solo si confías en el origen del archivo.
- En la hoja "Datos" del archivo descargable, graba una macro sencilla que solo ponga en negrita los encabezados de la tabla — el formato completo lo harás en el Taller 8.2.
- Detén la grabación, borra el formato aplicado y vuelve a ejecutar la macro para comprobar que funciona.
Taller 8.2 — Grabadora de macros con una base de datos real (20 retos)
Qué hay que hacer:
- Mira el video completo antes de empezar a grabar nada.
- Descarga la guía en Word y el archivo Excel de este taller — ábrelos juntos, uno al lado del otro.
- Guarda el Excel como
MacroProfe.xlsxy conviértelo aMacroProfe.xlsmpara que pueda contener macros. - En la hoja "Instrucciones" revisa los 10 pasos de orden y formato; aplícalos sobre la hoja "Resultado" mientras grabas una macro con el atajo
Ctrl + M. Ensaya y corrige sin usar atajos hasta que quede bien, detén la grabación y ejecútala para comprobar el resultado. - Crea una copia como
macroEstudiante.xlsmy, sobre una de las hojas "Datos 1", graba una nueva macro aplicando al menos 5 de los 20 retos de la lista de abajo. - Guarda una copia de respaldo en OneDrive como
miMacroOnline.xlsm. - Si la macro falla aunque hayas seguido bien los pasos, el archivo puede estar corrupto: crea uno nuevo en .xlsm, copia y pega los datos, y haz respaldos antes de grabar y ensayar.
📋 Ver los 20 retos para tu macro personalizada
- Agregar una fila de totales al final de la tabla, sumando todas las columnas numéricas.
- Aplicar formato de moneda $ a la columna de precios.
- Agregar una columna de descuento que calcule el 10% sobre los precios.
- Aplicar formato condicional para resaltar los valores mayores a 2018 en la columna AÑO (y otro color para los menores o iguales).
- Agregar bordes a todas las celdas: bordes punteados solo en las columnas de fechas, bordes normales en el resto y un borde grueso exterior de color verde.
- Agregar una columna de estado (Activo/Inactivo) basada en una condición específica.
- Aplicar filtro de colores a la tabla.
- Agregar validación de datos que permita solo entradas específicas en una columna.
- Insertar un gráfico de barras basado en los datos de la tabla.
- Agregar títulos y etiquetas a los ejes del gráfico.
- Dividir una columna de texto en varias columnas usando un delimitador.
- Agregar comentarios a las celdas de los encabezados con contexto adicional.
- Agregar una columna de índice al inicio con un número consecutivo por fila.
- Agregar un logo al encabezado de la tabla.
- Configurar la impresión para que la tabla quepa en una sola página (márgenes y escala).
- Algo que se te ocurra a ti.
Taller 8.3 — Sistema de registros con validación y orden de datos
Qué hay que hacer:
- Mira el video completo antes de empezar a escribir código.
- Crea el formulario de entrada de datos (nombre, fecha, categoría, valor) tal como se muestra en el video.
- Escribe la macro que valida que ningún campo quede vacío antes de registrar el dato.
- Escribe la macro que ordena automáticamente los registros en la tabla al guardarlos.
- Prueba el sistema con al menos 5 registros distintos y verifica que quedan bien ordenados.
Taller 8.4 — Macro para guardar información en una base de datos
Qué hay que hacer:
- Mira el video completo antes de empezar a escribir código.
- Identifica la hoja de "Formulario" (donde se digitan los datos) y la hoja de "Base de Datos" (donde quedan guardados los registros).
- Escribe la macro que busca la primera fila vacía de la base de datos.
- Escribe la macro que copia los datos del formulario a esa fila vacía con un botón "Guardar".
- Agrega una macro que limpie el formulario después de guardar, lista para el siguiente registro.
- Prueba guardando al menos 5 registros seguidos y confirma que ninguno se sobrescribe.
Taller 8.5 — Sistema de inventario: entradas, salidas y control de stock
Qué hay que hacer:
- Mira el video completo antes de empezar a escribir código.
- Crea las 3 tablas: "Inventario" (stock actual), "Entradas" y "Salidas" de mercancía.
- Escribe la fórmula que registra una entrada y suma la cantidad al stock del producto correspondiente.
- Escribe la fórmula que registra una salida, resta del stock y avisa una macro que avise con un MsgBox si no hay suficiente cantidad disponible.
- Agrega una fórmula que actualice automáticamente la columna de stock en la hoja "Inventario" después de cada movimiento.
- Prueba con al menos 5 entradas y 5 salidas y verifica que el stock final sea correcto.
- Agrega un botón que desbloquea la hoja protegida y que también permita volver a bloquear.
Taller 8.6 — Cómo debe quedar una base de datos relacional en Excel
Qué hay que hacer:
- Mira el video completo antes de empezar a escribir código.
- Organiza la base de datos en una sola tabla: un encabezado por columna en la fila 1, sin celdas combinadas y sin filas ni columnas vacías en medio.
- Escribe un registro completo por fila (nada de datos repartidos en varias filas para un mismo registro).
- Revisa que cada columna tenga un solo tipo de dato (todo texto, todo número o todo fecha, sin mezclar).
- Convierte el rango en Tabla de Excel (Ctrl + T) para que crezca sola al agregar registros.
- Escribe una macro que recorra la tabla y valide que ninguna fila tenga una celda vacía en las columnas obligatorias.
Taller 8.7 — Crear tu primer formulario (UserForm) en VBA
Qué hay que hacer:
- Mira el video completo antes de empezar.
- Abre el editor de VBA (
Alt + F11); en el panel Proyecto haz clic derecho, Insertar, UserForm. - Agrega controles desde el Cuadro de herramientas: 3 Etiquetas (Label) + 3 Cuadros de texto (TextBox) para Nombre, Fecha y Producto, y un botón (CommandButton) "Guardar".
- Cambia el
Namey elCaptionde cada control desde la ventana Propiedades para que sean claros. - Haz doble clic en el botón "Guardar" y escribe el código que copie el valor de cada TextBox a la siguiente fila vacía de la hoja "Datos".
- Crea una macro corta que muestre el formulario con
UserForm1.Showy asígnala a un botón en la hoja. - Prueba el formulario ingresando al menos 3 registros y verifica que queden bien guardados.
Taller 8.8 — Formulario en VBA para alimentar una base de datos
Qué hay que hacer:
- Mira el video completo antes de empezar.
- Este archivo ya trae la hoja "Formulario" (donde irá el botón que abre el UserForm) y la hoja "Base de Datos" (donde deben quedar los registros).
- Crea el UserForm con los campos necesarios y agrega un ListBox o ComboBox para mostrar los registros ya guardados.
- Escribe la macro que busca la primera fila vacía de "Base de Datos" y agrega ahí los datos del formulario.
- Agrega un botón "Limpiar" que borre los campos del formulario después de guardar.
- Agrega una validación: que el botón "Guardar" no funcione si el campo Nombre está vacío (usa
MsgBoxpara avisar). - Prueba guardando al menos 5 registros seguidos y confirma que ninguno se sobrescribe.
📥 Taller 8.9 — Descarga el Taller Final (Ver curso completo de Macros)
Archivo Excel habilitado para macros con instrucciones, 10 ejercicios, referencia VBA y datos de práctica.
📝 Cuestionario
10 preguntas aleatorias del banco de 50. Calificación de 0 a 100.
Tu calificación: