📖 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 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. 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.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
Selecciona un ejemplo para ver el código y su explicación.
📚 Diccionario VBA
Range("A1:C5")
Cells(2, 3) = celda C2.
Worksheets("Hoja1")
Dim total As Double
Range("A1").Value = 10
🎬 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.
Tu calificación: