VBA (Visual Basic for Applications) es el lenguaje de programación que vive dentro de Excel. Con él puedes convertir una serie de clics repetidos —formatear, copiar, pegar, ordenar, enviar— en un solo botón que hace todo por ti. Funciona en Excel para Microsoft 365, 2024, 2021, 2019, 2016 y 2013 en Windows, y también en Excel para Mac. En este tutorial vas a montar una hoja de ventas, vas a grabar tu primera macro, vas a entender el código que se genera y vas a aprender a leer y escribir celdas con VBA. Al terminar sabrás abrir el editor, automatizar una tarea repetida y guardar el archivo como libro habilitado para macros (.xlsm).
Qué es VBA y para qué te sirve en Excel
Imagina una hoja de ventas mensuales de tu tienda. Cada lunes abres el archivo, pegas los pedidos de la semana, ordenas por producto, pones en negrita la fila de encabezado, calculas un total y mandas el resumen por correo. Son dos horas de trabajo mecánico que haces igual siempre. VBA es el lenguaje que te permite escribir una vez esa secuencia y luego ejecutarla con un clic: es como tener un asistente que repite exactamente lo que le has enseñado, sin cansarse ni equivocarse.
Las macros (los programas escritos en VBA) viven dentro del propio archivo de Excel, en un libro habilitado para macros (.xlsm). No hace falta instalar nada extra: el editor viene con Excel y se abre con Alt+F11. VBA no sustituye a las fórmulas ni a las tablas dinámicas; las complementa. Donde las fórmulas hacen un cálculo, VBA hace una acción: abrir un libro, recorrer filas, cambiar formatos, mostrar mensajes o generar un PDF.
Cómo abrir el editor y dónde escribir tu código
Antes de escribir nada, necesitas ver la pestaña Programador en la cinta de opciones, porque ahí están los botones de macros. Si tu Excel aún no la muestra, actívala con estos pasos.
- Haz clic en Archivo y después en Opciones.
- En la ventana que se abre, elige Personalizar cinta de opciones.
- En la lista Pestañas principales, marca la casilla Programador.
- Pulsa Aceptar: la pestaña aparece a la derecha de Vista.
Ahora abre el editor con Alt+F11. Se abre una ventana nueva, distinta de Excel, con su propio menú.
El editor de Visual Basic: las tres ventanas que usarás siempre
El editor tiene tres zonas que reconocerás rápido.
VBAProject (TuLibro.xlsm)
Microsoft Excel Objetos
ThisWorkbook (codigo del libro)
Hoja1 (Hoja1) (codigo de cada hoja)
Modulos
Modulo1 (tus macros)
El Explorador de proyectos (a la izquierda) muestra tu libro y sus hojas. ThisWorkbook contiene código que se ejecuta al abrir o cerrar el archivo; cada hoja tiene su propio código para sus eventos. Módulos son hojas en blanco pensadas para guardar macros reutilizables. La Ventana Inmediato (abajo) sirve para probar expresiones: escribes ? Range("A1").Value y pulsas Intro para ver el resultado.
Insertar un módulo donde escribir las macros
Las macros que vas a escribir a mano van en un módulo, no en el código de la hoja.
- Con el editor abierto (Alt+F11), haz clic en Insertar en la barra de menús del editor.
- Elige Módulo.
- Aparece Módulo1 en el Explorador de proyectos y a la derecha una hoja en blanco donde escribir.
La grabadora de macros: tu maestra particular
La grabadora de macros es la mejor forma de empezar: tú haces clic en Excel y ella traduce cada acción a código VBA. Vas a usarla sobre una hoja de productos para ver qué genera.
Copia esta hoja en un libro nuevo (la celda activa es A1):
| A | B | C | |
|---|---|---|---|
| 1 | Producto | Precio | Stock |
| 2 | Cuaderno | 3,20 | 25 |
| 3 | Boligrafo | 1,10 | 80 |
| 4 | Carpeta | 2,80 | 12 |
| 5 | Grapas | 0,90 | 200 |
| 6 | Pegamento | 1,60 | 30 |
| 7 | Tijeras | 2,50 | 18 |
| 8 | Regla | 1,30 | 45 |
| 9 | Goma | 0,80 | 60 |
| 10 | Lapiz | 0,70 | 120 |
| 11 | Sacapuntas | 0,90 | 75 |
| 12 | Tinta | 4,50 | 8 |
| 13 | Calculadora | 12,00 | 4 |
| 14 | Mochila | 22,00 | 9 |
| 15 | Estuche | 5,50 | 22 |
| 16 | Pegatina | 0,30 | 300 |
| 17 | Cuaderno A4 | 4,20 | 15 |
| 18 | Rotulador | 1,80 | 40 |
| 19 | Compas | 3,50 | 6 |
| 20 | Carpeta anillas | 5,00 | 11 |
| 21 | Tijeras escolares | 2,20 | 28 |
- Selecciona la fila 1 (clic en el número de fila 1).
- Ve a la pestaña Programador y pulsa Grabar macro.
- Nombre de la macro:
ResaltarYTotalizar. Atajo: déjalo en blanco. Guardar macro en: Este libro. Pulsa Aceptar. - Con la fila 1 seleccionada, ve a Inicio > Fuente > Negrita (o Ctrl+N).
- Haz clic en la celda C22 y escribe
=SUM(C2:C21). Pulsa Intro. - Vuelve a Programador y pulsa Detener grabación.
El código que escribió la grabadora, línea por línea
Abre el editor con Alt+F11 y despliega Módulos > Módulo1. La grabadora ha escrito esto:
Sub ResaltarYTotalizar()
Rows("1:1").Select
Selection.Font.Bold = True
Range("C22").Select
Selection.Formula = "=SUM(C2:C21)"
Range("C22").Select
End Sub
Sub y End Sub son la abertura y el cierre de la macro, como las llaves de una receta. Rows("1:1").Select selecciona la fila 1. Selection.Font.Bold = True pone en negrita lo seleccionado (cambia True por False para quitar la negrita). Range("C22") apunta a la celda C22. .Formula es la propiedad que guarda la fórmula de la celda (en inglés y con coma, lo verás después). El último Select sobra: la grabadora lo añade siempre, pero puedes borrarlo sin miedo.
Ejecutar la macro desde la cinta y desde un atajo
Hay tres formas de lanzar una macro.
- Ve a Programador > Macros (o pulsa Alt+F8).
- Selecciona ResaltarYTotalizar y pulsa Ejecutar.
Para asignarle un atajo propio:
- En la misma ventana, pulsa Opciones.
- En Tecla de método abreviado, escribe
T. La macro se ejecutará con Ctrl+Mayús+T (siempre con Mayús para no pisar atajos de Excel). - Pulsa Aceptar y luego Cancelar.
Leer y escribir celdas con Range y Cells
Ahora vas a automatizar el cálculo del importe de cada venta en la hoja Ventas del mismo libro. Empieza con esta hoja (la celda activa es A1):
| A | B | C | |
|---|---|---|---|
| 1 | Producto | Cantidad | Precio |
| 2 | Cuaderno | 4 | 3,20 |
| 3 | Boligrafo | 12 | 1,10 |
| 4 | Carpeta | 2 | 2,80 |
| 5 | Grapas | 5 | 0,90 |
| 6 | Pegamento | 3 | 1,60 |
| 7 | Tijeras | 1 | 2,50 |
| 8 | Regla | 6 | 1,30 |
| 9 | Goma | 8 | 0,80 |
| 10 | Lapiz | 20 | 0,70 |
Copia este código en Módulo1 (debajo del que escribió la macro anterior):
Sub CalcularImportes()
Range("D1").Value = "Importe"
Range("D2").FormulaLocal = "=B2*C2"
Range("D3").FormulaLocal = "=B3*C3"
Range("D4").FormulaLocal = "=B4*C4"
MsgBox "Importes calculados"
End Sub
Ejecútala. La columna D se rellena con los importes. El resultado se ve así:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Precio | Importe |
| 2 | Cuaderno | 4 | 3,20 | 12,80 |
| 3 | Boligrafo | 12 | 1,10 | 13,20 |
| 4 | Carpeta | 2 | 2,80 | 5,60 |
Range con letra: Range("B12")
Cuando conoces la dirección exacta de la celda o del rango, usa Range. Es la forma más legible para escribir valores rápidos.
Sub SellarPendientes()
Range("D5:D10").Value = "Pendiente"
Range("D2:D10").Interior.Color = RGB(255, 242, 204)
End Sub
La primera línea rellena de una vez las seis celdas de D5 a D10 con la palabra Pendiente, sin necesidad de bucle. La segunda les pone un fondo amarillo claro.
Cells con números: Cells(2, 4) es D2
Cuando no conoces la dirección porque la macro debe recorrer filas, usa Cells(fila, columna). La columna se cuenta desde 1: A=1, B=2, C=3, D=4. Cells(2, 4) equivale a Range("D2").
Sub RellenarConBucle()
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i
End Sub
For i = 2 To 10 repite el bloque interior con i valiendo 2, 3, 4… hasta 10. Cells(i, 4) apunta a la celda de la fila i columna 4 (D2, D3, …, D10). Cells(i, 2).Value lee la cantidad y Cells(i, 3).Value, el precio. El resultado es el mismo que con Range, pero ya tienes un patrón para automatizar cientos de filas.
Escribir fórmulas desde VBA: Formula, FormulaLocal y FormulaR1C1
Hay cuatro formas de escribir una fórmula en una celda desde VBA. Dos usan referencias A1 (la columna con letra) y dos usan R1C1 (filas y columnas con números). Las «normales» (Formula, FormulaR1C1) entienden solo nombres de función en inglés y separador coma; las «Local» (FormulaLocal, FormulaR1C1Local) usan el idioma del usuario (SUMA en español) y punto y coma.
Sub TresFormas()
Range("D2").Formula = "=SUM(B2:C2)" ' ingles, coma
Range("D3").FormulaLocal = "=SUMA(B3:C3)" ' espanol, punto y coma
Range("D4").FormulaR1C1 = "=SUM(RC[-2]:RC[-1])" ' relativa a la propia celda
End Sub
En D2, Formula escribe la fórmula en inglés; Excel la traduce a la vista al idioma del usuario. En D3, FormulaLocal la escribe como se ve en la hoja. En D4, FormulaR1C1 usa RC[-2] para referirse a dos columnas a la izquierda (B) y RC[-1] para una columna a la izquierda (C), y al copiar esta línea a otra fila sigue funcionando.
=SUMA(...) en .Formula o usas punto y coma en una propiedad no Local, VBA lanza el error 1004 en tiempo de ejecución porque no entiende la fórmula. Usa FormulaLocal para español con punto y coma, y Formula para inglés con coma.Variables, bucles y condicionales: la lógica mínima
Una macro que solo escribe valores sirve para poco. La gracia de VBA es que puede decidir: si la cantidad supera cierto umbral, aplica un descuento; si no, deja el precio tal cual. En la hoja Ventas, añade una columna Descuento en E y copia estos datos:
| A | B | C | E | |
|---|---|---|---|---|
| 1 | Producto | Cantidad | Precio | Descuento |
| 2 | Cuaderno | 4 | 3,20 | |
| 3 | Boligrafo | 12 | 1,10 | |
| 4 | Carpeta | 2 | 2,80 | |
| 5 | Grapas | 5 | 0,90 | |
| 6 | Pegamento | 3 | 1,60 | |
| 7 | Tijeras | 1 | 2,50 | |
| 8 | Regla | 6 | 1,30 | |
| 9 | Goma | 8 | 0,80 | |
| 10 | Lapiz | 20 | 0,70 |
Esta macro recorre la columna Cantidad (B2:B10) y aplica un 5 % solo a las ventas grandes:
Sub AplicarDescuento()
Dim i As Long
Dim cantidad As Double
Dim precio As Double
Dim granVenta As Boolean
Dim contador As Long
contador = 0
For i = 2 To 10
cantidad = Cells(i, 2).Value
precio = Cells(i, 3).Value
granVenta = cantidad * precio > 15
If granVenta Then
Cells(i, 5).Value = cantidad * precio * 0.05
contador = contador + 1
Else
Cells(i, 5).Value = 0
End If
Next i
MsgBox "Ventas con descuento: " & contador
End Sub
Tras ejecutarla, E2:E10 muestra el descuento (5 % del importe) en las filas cuya Cantidad×Precio supera 15, y 0 en las demás. El MsgBox final avisa cuántas se beneficiaron.
Dim y los tipos que usarás a diario: Long, String, Boolean, Double
Dim declara una variable: le reserva un hueco en la memoria y le dice qué tipo de dato guardará. Los cuatro tipos más usados son:
Long: números enteros sin decimales, como un índice de bucle. Rango de valores: -2.147.483.648 a 2.147.483.647.Double: números con decimales, como un precio o un cálculo.String: texto entre comillas dobles, como un saludo o una variable.Boolean: verdadero (True) o falso (False), para condiciones.
Dim i As Long
Dim nombre As String
Dim encontrado As Boolean
Dim total As Double
Option Explicit (el editor la suele añadir al pedirlo), VBA obliga a declarar todas las variables con Dim antes de usarlas. Esto evita errores de escritura como cantidd en lugar de cantidad.If…Then…Else y el bucle For…Next
If condición Then … Else … End If ejecuta un trozo de código si la condición se cumple y otro si no. For i = inicio To fin … Next i ejecuta el mismo bloque para cada valor de i entre inicio y fin.
If Cells(i, 2).Value > 150 Then
Cells(i, 3).Value = Cells(i, 2).Value
contador = contador + 1
End If
Si la condición es falsa, el bloque interior no se ejecuta y el programa sigue después del End If. Sin la rama Else, no pasa nada en ese caso: la celda simplemente no se rellena.
Errores típicos al empezar y cómo resolverlos
Las primeras tardes con VBA se parecen siempre: VBA te avisa con un mensaje en una ventana amarilla. Estos son los avisos que verás casi siempre y cómo arreglarlos.
"Error de compilación: Variable no definida"
Causa: has usado una variable sin declararla con Dim, o tienes Option Explicit activado y se te ha olvidado la declaración. Arreglo: añade la línea Dim nombre As Long (o el tipo que toque) en la parte de arriba del módulo, al lado de las otras declaraciones.
"Error 1004 en tiempo de ejecución" al asignar una fórmula
Causa: has escrito la fórmula en español (=SUMA(...)) en .Formula o has usado punto y coma donde VBA espera coma. Arreglo: cambia .Formula por .FormulaLocal si quieres escribir la fórmula en tu idioma, o reescribe la fórmula en inglés con coma (=SUM(...)).
Las macros se pierden al guardar
Causa: has guardado el archivo con Archivo > Guardar y Excel lo ha guardado como .xlsx, que no admite macros. Arreglo: en Archivo > Guardar como, cambia el tipo a Libro de Excel habilitado para macros (.xlsm) y guárdalo. La próxima vez, Ctrl+G lo guarda ya en .xlsm.
La macro está pero no hace nada al pulsar el botón
Causa: el archivo lo descargaste de internet o lo recibiste por correo, y Excel bloquea las macros por seguridad. Arreglo: abre Archivo > Información, pulsa Propiedades junto a la advertencia de seguridad y elige Desbloquear. Guarda el archivo y las macros vuelven a funcionar.
Lo que ya sabes hacer con VBA y el siguiente paso
Al terminar este tutorial ya sabes:
- Abrir el editor de VBA con Alt+F11 y reconocer sus tres ventanas.
- Grabar una macro con la grabadora y entender el código que genera.
- Escribir tus propias macros en un módulo con
SubyEnd Sub. - Leer y escribir celdas con
Range("A1")yCells(fila, columna). - Recorrer filas con un bucle
For…Nexty decidir conIf…Then…Else. - Guardar el libro como
.xlsmpara no perder las macros.
El siguiente paso lógico es poner un botón en la hoja que ejecute tu macro: en Programador > Controles > Insertar > Botón, dibuja el botón en la hoja, asígnale la macro AplicarDescuento y cada clic recalculará los descuentos sin abrir el editor.
Dudas al empezar con VBA en Excel
1. ¿Microsoft VBA va a dejar de funcionar?
Microsoft ha confirmado que VBA seguirá disponible en las aplicaciones de escritorio de Office, pero en 2024 declaró que su mantenimiento entró en una fase de «bajo prioridad». Para nuevas automatizaciones en la nube, Microsoft ya apuesta por Office Scripts y Python en Excel, pero en el Excel de escritorio VBA sigue funcionando como siempre.
2. ¿Qué son los Office Scripts y en qué se diferencian de VBA?
Office Scripts son la alternativa moderna a VBA pensada para Excel en la web y para Microsoft 365, con un editor de JavaScript o TypeScript y grabación de acciones por bloques. VBA solo vive en el escritorio y usa su propio lenguaje; Office Scripts graba en la nube y guarda los scripts en OneDrive, así que son el camino natural si trabajas con Excel para la web.
3. ¿En qué se diferencia Power Query de programar macros en VBA?
Power Query no es un lenguaje de programación, sino un editor visual de consultas (Datos > Obtener y transformar) que importa, limpia y combina datos de otras tablas, archivos o páginas web sin escribir código. Cuando tus necesidades son importar y transformar datos, Power Query llega más lejos con menos esfuerzo; VBA encaja mejor cuando quieres automatizar acciones dentro de Excel (clics, formatos, bucles sobre celdas).
4. ¿Se puede usar Python dentro de Excel?
Sí, desde 2023 Microsoft 365 permite usar Python en Excel escribiendo código en celdas con la función =PY() y bibliotecas como pandas o matplotlib. Se ejecuta en la nube de Microsoft (no necesita instalación local) y convive con VBA, así que puedes mezclar fórmulas, macros y Python en el mismo libro.
Fuentes
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 04/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 04/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 04/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 04/10/2026