📖 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")  |  ThisWorkbook
  • Worksheet → una hoja del libro.
    Worksheets("Enero")  |  ActiveSheet
  • Range → 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:

Listo — vbInformation
ℹ️
Los datos se guardaron correctamente.
MsgBox "Los datos se guardaron correctamente.", _
    vbInformation, "Listo"
Atención — vbExclamation
⚠️
Hay celdas vacías en la columna B. Revísalas antes de continuar.
MsgBox "Hay celdas vacías en la columna B. " & _
    "Revísalas antes de continuar.", vbExclamation, "Atención"
Error — vbCritical
⛔
No se pudo dividir: el denominador es cero.
MsgBox "No se pudo dividir: el denominador es cero.", _
    vbCritical, "Error"
Confirmar — vbQuestion
❓
¿Deseas eliminar este registro? Esta acción no se puede deshacer.
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.Number y Err.Description dan información del error.

Excel bloquea macros por defecto por seguridad. Para habilitarlas:

  1. Archivo → Opciones → Centro de confianza → Configuración del Centro de confianza.
  2. Configuración de macros → seleccionar el nivel adecuado.
  3. Para libros propios: Habilitar todas las macros (solo en equipos de confianza).
  4. 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

VBA
Visual Basic for Applications. Lenguaje de programación integrado en Microsoft Office para automatizar tareas.
Macro
Secuencia de instrucciones VBA que Excel ejecuta para automatizar una tarea repetitiva.
Sub
Subrutina: bloque de código que ejecuta acciones sin devolver un valor. Forma básica de una macro.
Function
Función: bloque de código que ejecuta operaciones y devuelve un valor. Usable como fórmula en celda.
Módulo
Contenedor de código VBA dentro del libro. Los módulos estándar guardan subrutinas y funciones reutilizables.
Range
Objeto que representa una celda o un conjunto de celdas en Excel. Ej: Range("A1:C5")
Cells
Forma alternativa de referenciar celdas por fila y columna numéricas. Ej: Cells(2, 3) = celda C2.
Workbook
Objeto que representa un libro de Excel (archivo .xlsm / .xlsx).
Worksheet
Objeto que representa una hoja dentro de un libro. Ej: Worksheets("Hoja1")
Dim
Instrucción para declarar una variable y su tipo de dato. Ej: Dim total As Double
For / Next
Bucle que repite un bloque un número definido de veces. Ideal para recorrer filas o columnas.
Do While
Bucle que repite instrucciones mientras una condición sea verdadera. Útil cuando no se sabe cuántas repeticiones habrá.
If / Then / Else
Estructura condicional que ejecuta código distinto según si una condición es verdadera o falsa.
MsgBox
Función que muestra un cuadro de diálogo con un mensaje al usuario.
InputBox
Función que muestra un cuadro para que el usuario ingrese un dato de texto.
ActiveSheet
Referencia a la hoja activa en ese momento en Excel.
ThisWorkbook
Referencia al libro donde está almacenado el código VBA que se está ejecutando.
.Value
Propiedad que lee o escribe el valor de una celda. Ej: Range("A1").Value = 10
.Interior.Color
Propiedad que define el color de fondo de una celda usando un valor RGB.
Option Explicit
Directiva que obliga a declarar todas las variables antes de usarlas, evitando errores tipográficos.
On Error GoTo
Instrucción de manejo de errores que redirige la ejecución a una etiqueta cuando ocurre un fallo.
.xlsm
Extensión de archivo Excel habilitado para macros. Los archivos .xlsx no pueden contener macros.
Debug.Print
Imprime un valor en la Ventana Inmediato del editor VBA. Útil para depurar el código.

🎬 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:

  1. Mira el video completo antes de tocar nada en Excel.
  2. Con tus palabras, explica qué es una macro y para qué sirve (piensa en una tarea repetitiva que hagas siempre igual).
  3. Ve a Archivo > Opciones > Personalizar cinta de opciones y activa la casilla "Programador" (en algunas versiones se llama "Desarrollador").
  4. Ubica en la nueva pestaña Programador los botones "Grabar macro", "Macros" y "Seguridad de macros".
  5. 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".
  6. 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.
  7. 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.
  8. 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:

  1. Mira el video completo antes de empezar a grabar nada.
  2. Descarga la guía en Word y el archivo Excel de este taller — ábrelos juntos, uno al lado del otro.
  3. Guarda el Excel como MacroProfe.xlsx y conviértelo a MacroProfe.xlsm para que pueda contener macros.
  4. 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.
  5. Crea una copia como macroEstudiante.xlsm y, sobre una de las hojas "Datos 1", graba una nueva macro aplicando al menos 5 de los 20 retos de la lista de abajo.
  6. Guarda una copia de respaldo en OneDrive como miMacroOnline.xlsm.
  7. 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
  1. Agregar una fila de totales al final de la tabla, sumando todas las columnas numéricas.
  2. Aplicar formato de moneda $ a la columna de precios.
  3. Agregar una columna de descuento que calcule el 10% sobre los precios.
  4. Aplicar formato condicional para resaltar los valores mayores a 2018 en la columna AÑO (y otro color para los menores o iguales).
  5. 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.
  6. Agregar una columna de estado (Activo/Inactivo) basada en una condición específica.
  7. Aplicar filtro de colores a la tabla.
  8. Agregar validación de datos que permita solo entradas específicas en una columna.
  9. Insertar un gráfico de barras basado en los datos de la tabla.
  10. Agregar títulos y etiquetas a los ejes del gráfico.
  11. Dividir una columna de texto en varias columnas usando un delimitador.
  12. Agregar comentarios a las celdas de los encabezados con contexto adicional.
  13. Agregar una columna de índice al inicio con un número consecutivo por fila.
  14. Agregar un logo al encabezado de la tabla.
  15. Configurar la impresión para que la tabla quepa en una sola página (márgenes y escala).
  16. Algo que se te ocurra a ti.

Taller 8.3 — Sistema de registros con validación y orden de datos

Qué hay que hacer:

  1. Mira el video completo antes de empezar a escribir código.
  2. Crea el formulario de entrada de datos (nombre, fecha, categoría, valor) tal como se muestra en el video.
  3. Escribe la macro que valida que ningún campo quede vacío antes de registrar el dato.
  4. Escribe la macro que ordena automáticamente los registros en la tabla al guardarlos.
  5. 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:

  1. Mira el video completo antes de empezar a escribir código.
  2. Identifica la hoja de "Formulario" (donde se digitan los datos) y la hoja de "Base de Datos" (donde quedan guardados los registros).
  3. Escribe la macro que busca la primera fila vacía de la base de datos.
  4. Escribe la macro que copia los datos del formulario a esa fila vacía con un botón "Guardar".
  5. Agrega una macro que limpie el formulario después de guardar, lista para el siguiente registro.
  6. 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:

  1. Mira el video completo antes de empezar a escribir código.
  2. Crea las 3 tablas: "Inventario" (stock actual), "Entradas" y "Salidas" de mercancía.
  3. Escribe la fórmula que registra una entrada y suma la cantidad al stock del producto correspondiente.
  4. 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.
  5. Agrega una fórmula que actualice automáticamente la columna de stock en la hoja "Inventario" después de cada movimiento.
  6. Prueba con al menos 5 entradas y 5 salidas y verifica que el stock final sea correcto.
  7. 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:

  1. Mira el video completo antes de empezar a escribir código.
  2. 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.
  3. Escribe un registro completo por fila (nada de datos repartidos en varias filas para un mismo registro).
  4. Revisa que cada columna tenga un solo tipo de dato (todo texto, todo número o todo fecha, sin mezclar).
  5. Convierte el rango en Tabla de Excel (Ctrl + T) para que crezca sola al agregar registros.
  6. 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:

  1. Mira el video completo antes de empezar.
  2. Abre el editor de VBA (Alt + F11); en el panel Proyecto haz clic derecho, Insertar, UserForm.
  3. 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".
  4. Cambia el Name y el Caption de cada control desde la ventana Propiedades para que sean claros.
  5. 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".
  6. Crea una macro corta que muestre el formulario con UserForm1.Show y asígnala a un botón en la hoja.
  7. 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:

  1. Mira el video completo antes de empezar.
  2. 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).
  3. Crea el UserForm con los campos necesarios y agrega un ListBox o ComboBox para mostrar los registros ya guardados.
  4. Escribe la macro que busca la primera fila vacía de "Base de Datos" y agrega ahí los datos del formulario.
  5. Agrega un botón "Limpiar" que borre los campos del formulario después de guardar.
  6. Agrega una validación: que el botón "Guardar" no funcione si el campo Nombre está vacío (usa MsgBox para avisar).
  7. 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.