📖 Teoría: Macros en Excel

Haz clic en cada tema para expandirlo.

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 DesarrolladorGrabar 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. Puede tener botones de respuesta.

MsgBox "¡Proceso completado!", vbInformation, "Listo"

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

💡 vbInformation, vbExclamation, vbCritical cambian el ícono del MsgBox.

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

Selecciona un ejemplo para ver el código y su explicación.

📚 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

📥 Descarga el Taller (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.