Una makro VBA es una secuencia de comandos que Excel ejecuta para realizar una tarea: calcular totales, escribir datos o aplicar un formato. En este tutorial usarás un libro de ventas para aprender a abrir el editor, grabar una acción, escribir una macro y ejecutarla. VBA está disponible en Excel de escritorio y para Mac; Excel para la web utiliza Scripts de Office y no ejecuta macros VBA.
Qué es una makro VBA y qué problema resuelve
En la hoja Ventas, cada venta necesita un total: la cantidad del producto multiplicada por su precio. Hacerlo a mano funciona para cuatro filas, pero se vuelve repetitivo cuando la lista crece.
Una macro VBA puede recorrer esas filas y escribir el resultado automáticamente. También puede dar formato, copiar información o preparar un informe.
VBA significa Visual Basic for Applications. Puedes empezar de dos formas:
- Grabando una acción: Excel convierte tus pasos en código. Es útil para descubrir cómo se nombran las hojas, celdas y acciones.
- Escribiendo el código: le indicas a Excel exactamente qué debe hacer y puedes repetirlo con distintos datos.
La macro no sustituye a las fórmulas. Una fórmula calcula un valor; una macro puede ejecutar una secuencia de acciones, como escribir varias filas, ajustar columnas y mostrar el resultado terminado.
=B2*C2. En Excel configurado con punto decimal, el separador de argumentos es la coma.Los objetos básicos: libro, hoja, rango y celda
Antes de escribir código, piensa qué parte del libro debe usar la macro.
- Application representa Excel.
- Workbooks representa los libros abiertos.
- Worksheets representa las hojas de un libro.
- Range representa un rango de celdas, como
A1:C10. - Cells representa una celda mediante número de fila y columna:
Cells(2, 4)es D2.
En nuestro libro, Ventas.xlsx es el libro, Enero es la hoja y A1:C10 contiene los datos.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | 15,00 |
| 3 | Cuaderno | 3,20 | 5 | 16,00 |
| 4 | Goma | 0,80 | 12 | 9,60 |
| 5 | Boligrafo | 1,25 | 8 | 10,00 |
Range("A1:D5") señala todo el bloque. Cells(2, 4) señala solamente D2. Esa diferencia será importante cuando la macro recorra las filas.
El editor de VBA y las partes de una macro
En Windows, Alt+F11 abre el editor de VBA. En Mac, también puedes usar el atajo de Mac correspondiente o abrirlo desde el menú de herramientas de Office.
Si no aparece el editor, activa la pestaña Programador mediante Archivo > Opciones > Personalizar cinta de opciones. Después:
En el módulo aparece una macro como esta:
Sub Saludo()
Range("A1").Value = "Hola"
End Sub
La línea Sub Saludo() inicia el procedimiento. Las instrucciones van entre esa línea y End Sub. Esta primera macro escribe “Hola” en la celda A1.
Para ejecutarla:
- Selecciona
Saludodentro del módulo. - Pulsa F5, o usa el botón de ejecución del editor.
- Regresa a Excel y observa A1.
Sub y End Sub deben aparecer correctamente y cada punto y coma, paréntesis y comilla debe estar bien colocado.Grabar una acción o escribirla a mano
La grabadora sirve para descubrir cómo VBA describe una tarea. Por ejemplo, si quieres ajustar el ancho de una columna, puedes grabarlo:
Después realizas el formato y pulsas Detener grabación. Excel crea un módulo con código equivalente.
La ruta de grabación puede comenzar también desde:
La macro grabada es útil como punto de partida. Luego puedes abrirla con Alt+F11, leerla y cambiar los nombres de la hoja o del rango.
En nuestro libro, conviene grabar una acción sencilla, como poner negrita en el encabezado. El código generado te mostrará que Excel trabaja con objetos y rangos. Después podrás escribir una macro más completa para los totales.
Automatiza el total de cada venta
Crea un libro llamado Ventas.xlsx, cambia el nombre de la hoja a Enero y escribe estos datos:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | |
| 3 | Cuaderno | 3,20 | 5 | |
| 4 | Goma | 0,80 | 12 | |
| 5 | Boligrafo | 1,25 | 8 |
Ahora abre Alt+F11, inserta un módulo y pega esta macro:
Sub TotalPorFila()
Dim i As Long
For i = 2 To 5
Cells(i, 4).FormulaLocal = "=B" & i & "*C" & i
Next i
End Sub
El bucle For i = 2 To 5 recorre las filas 2 a 5. La línea Next i termina cada vuelta. Cells(i, 4) selecciona la columna D de la fila actual.
Después pulsa F5. La columna D se completa con los totales:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | 15,00 |
| 3 | Cuaderno | 3,20 | 5 | 16,00 |
| 4 | Goma | 0,80 | 12 | 9,60 |
| 5 | Boligrafo | 1,25 | 8 | 10,00 |
Guarda el libro con la extensión .xlsm: Archivo > Guardar como y, en el tipo de archivo, elige Libro de Excel habilitado para macros. Un archivo .xlsx no conserva el código VBA.
Lee el libro, la hoja y el rango que necesitas
Workbooks("Ventas.xlsx") selecciona el libro por su nombre. Worksheets("Enero") selecciona la hoja. Range("A1:C10") señala un rango fijo.
Para una tabla que crece, suele ser más cómodo usar Cells. Si necesitas una sola operación sobre un rango, usa Range.
Sub MostrarRango()
Dim libro As Workbook
Dim hoja As Worksheet
Set libro = Workbooks("Ventas.xlsx")
Set hoja = libro.Worksheets("Enero")
MsgBox hoja.Range("A1:D5").Address
End Sub
La macro muestra la dirección del rango utilizado. Si el libro no está abierto con ese nombre, Excel no podrá encontrarlo. Para un libro que aún estás creando, ActiveWorkbook hace referencia al libro activo, pero conviene ser explícito cuando la macro deba funcionar con varios libros.
Completa una tabla desde una macro
Añade una hoja llamada Resultado. En A1 escribe Producto, en B1 Precio, en C1 Cantidad y en D1 Total. Después pega esta macro:
Sub ResultadoVentas()
Dim origen As Worksheet
Dim destino As Worksheet
Dim i As Long
Set origen = Worksheets("Enero")
Set destino = Worksheets("Resultado")
destino.Range("A2:C5").Value = origen.Range("A2:C5").Value
For i = 2 To 5
destino.Cells(i, 4).FormulaLocal = "=B" & i & "*C" & i
Next i
End Sub
La primera asignación copia los datos de las cuatro ventas. La segunda crea los totales en la hoja Resultado.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | 15,00 |
| 3 | Cuaderno | 3,20 | 5 | 16,00 |
| 4 | Goma | 0,80 | 12 | 9,60 |
| 5 | Boligrafo | 1,25 | 8 | 10,00 |
Ajusta el formato antes de mostrar los datos
Puedes añadir formato al rango después de escribir los datos:
Sub FormatearResultado()
Dim hoja As Worksheet
Set hoja = Worksheets("Resultado")
hoja.Range("A1:D1").Font.Bold = True
hoja.Range("A1:D5").Columns.AutoFit
hoja.Range("B2:D5").NumberFormat = "0,00"
End Sub
La primera línea destaca el encabezado. Columns.AutoFit ajusta el ancho. El formato 0,00 muestra dos decimales.
Escribe fórmulas con VBA sin errores de idioma
VBA ofrece cuatro propiedades principales para leer o escribir fórmulas:
| Propiedad | Referencias | Nombre de las funciones | Separador |
|---|---|---|---|
Formula |
A1 | Inglés | Coma |
FormulaR1C1 |
R1C1 | Inglés | Coma |
FormulaLocal |
A1 | Idioma del usuario | Punto y coma en este ejemplo |
FormulaR1C1Local |
R1C1 | Idioma del usuario | Punto y coma en este ejemplo |
Por ejemplo, estas dos líneas escriben el total de D2:
=B2*C2
Range("D2").Formula = "=B2*C2"
Range("D2").FormulaLocal = "=B2*C2"
En .Formula y .FormulaR1C1, las funciones deben escribirse en inglés. Por eso SUM se utiliza en lugar de SUMA.
Range("D2").Formula = "=B2*C2"
Range("D2").FormulaR1C1 = "=RC[-2]*RC[-1]"
.Formula entiende A1; .FormulaR1C1 entiende las distancias relativas. En este caso, RC[-2] significa dos columnas a la izquierda y RC[-1], una columna a la izquierda.
Copia una fórmula por filas con FormulaR1C1
Para completar D2:D10, utiliza una sola asignación:
Sub TotalesConR1C1()
Range("D2:D10").FormulaR1C1 = "=RC[-2]*RC[-1]"
End Sub
Si B y C tienen estos valores:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Precio | Cantidad | Total |
| 2 | Lapiz | 1,50 | 10 | 15,00 |
| 3 | Cuaderno | 3,20 | 5 | 16,00 |
| 4 | Goma | 0,80 | 12 | 9,60 |
| 5 | Boligrafo | 1,25 | 8 | 10,00 |
La misma fórmula produce resultados distintos porque Excel ajusta las referencias en cada fila. Es útil cuando la fórmula debe repetirse muchas veces.
Encuentra y corrige los errores de una macro
La macro muestra un error 1004 al escribir una fórmula
Si usas esta línea en un Excel en español:
Range("D2").Formula = "=SUMA(B2:C2)"
Excel puede mostrar:
Se ha producido el error '1004' en tiempo de ejecución
La causa es que .Formula utiliza nombres de función en inglés. El arreglo es escribir SUM o cambiar a .FormulaLocal:
Range("D2").Formula = "=SUM(B2:C2)"
Range("D2").FormulaLocal = "=SUMA(B2:C2)"
La fórmula aparece con el nombre equivocado
Si usas =SUMA dentro de .Formula, Excel puede interpretarlo como un nombre desconocido y mostrar #¿NOMBRE?. Usa la propiedad que corresponda al idioma:
Range("D2").FormulaLocal = "=SUMA(B2:C2)"
La macro escribe en otra hoja
Cells(2, 4) escribe en la hoja activa, que puede no ser la esperada. Selecciona explícitamente la hoja:
Worksheets("Enero").Range("D2").FormulaLocal = "=B2*C2"
La macro no encuentra el libro
Workbooks("Ventas.xlsx") depende de que ese libro esté abierto con ese nombre. Comprueba el nombre antes de ejecutar la macro o usa ActiveWorkbook mientras trabajas en un único libro.
Qué puede y qué no puede hacer una makro VBA
| Herramienta | Para qué es adecuada | Qué debe saber el lector |
|---|---|---|
| Fórmula | Calcular un valor según datos de la hoja | Se actualiza según sus referencias |
| Macro VBA | Ejecutar una secuencia de acciones dentro de Excel | Depende del libro, las referencias y el código |
| Power Query | Importar y transformar datos de forma reutilizable | Se integra en Excel desde 2016, según la versión |
| Scripts de Office | Automatizar tareas en Excel para la web | No es una macro VBA de escritorio |
Una macro puede leer un libro, escribir celdas, cambiar formatos, recorrer rangos y trabajar con objetos de Excel. No significa que pueda hacerlo sin configuración: cada acción debe estar escrita o grabada.
.xlsx no conserva macros. Guarda las macros en .xlsm y no actives contenido ejecutable si no cones la procedencia del archivo.Lo que ya sabes hacer con tu primera macro VBA
Ya puedes:
- Abrir el editor con Alt+F11 (Cmd+F11 en Mac, si tu teclado incluye esa tecla).
- Insertar un módulo con
Insertar > Módulo. - Grabar una acción para descubrir código.
- Escribir un
Suby terminarlo conEnd Sub. - Recorrer filas con
ForyNext. - Usar
Cells,Range,WorksheetsyWorkbooks. - Escribir fórmulas con
.Formulao.FormulaLocal. - Corregir referencias y errores de idioma.
- Guardar el libro como
.xlsm.
El siguiente paso es añadir un botón o un atajo a tu macro ResultadoVentas para ejecutar el cálculo desde la hoja sin abrir el editor.
Fuentes
- MicrosoftFuture of (Excel) VBA (Macros)? – Microsoft Q&Aconsultado el 22/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 22/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 22/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 22/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 22/10/2026