macros

Makro VBA en Excel: automatiza tu primera tarea

octubre 23, 2026 Tuto Excel 10 min read
Makro VBA en Excel: automatiza tu primera tarea

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.

Nota: este tutorial usa fórmulas con punto y coma, por ejemplo =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.

D2fx15,00
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
Enero

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:

InsertarMódulo

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:

  1. Selecciona Saludo dentro del módulo.
  2. Pulsa F5, o usa el botón de ejecución del editor.
  3. Regresa a Excel y observa A1.
Cuidado: 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:

ProgramadorGrabar macro

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:

VistaMacrosGrabar macro

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.

Consejo: graba una acción cada vez. El código será más fácil de leer y de corregir.

Automatiza el total de cada venta

Crea un libro llamado Ventas.xlsx, cambia el nombre de la hoja a Enero y escribe estos datos:

D2fx
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
Enero

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:

D2fx=B2*C2
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
Enero
Comprueba: D2 debe mostrar 15,00, D3 16,00, D4 9,60 y D5 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.

D2fx=B2*C2
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
Resultado
Comprueba: la hoja Resultado debe tener los mismos cuatro productos y sus totales correctos.

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.

Comprueba: el encabezado debe verse en negrita, las columnas deben ajustarse al contenido y los importes deben mostrarse con 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:

D2fx=B2*C2
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
Enero

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.

Comprueba: D2:D5 deben mostrar 15,00; 16,00; 9,60 y 10,00.

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.

Consejo: ejecuta primero una macro pequeña que compruebe el libro y la hoja; después ejecuta la macro completa.

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.

Cuidado: un archivo .xlsx no conserva macros. Guarda las macros en .xlsm y no actives contenido ejecutable si no cones la procedencia del archivo.
Nota: Excel para la web no ejecuta macros VBA; utiliza Scripts de Office. En Excel para Mac, VBA está disponible en el escritorio, pero algunas funciones y rutas pueden variar.

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 Sub y terminarlo con End Sub.
  • Recorrer filas con For y Next.
  • Usar Cells, Range, Worksheets y Workbooks.
  • Escribir fórmulas con .Formula o .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.

Comprueba: vuelve a ejecutar la macro y verifica que la hoja Resultado conserva los cuatro productos, los cuatro totales y el formato aplicado.

Fuentes

  1. MicrosoftFuture of (Excel) VBA (Macros)? – Microsoft Q&Aconsultado el 22/10/2026
  2. MicrosoftLAMBDA — documentación oficialconsultado el 22/10/2026
  3. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 22/10/2026
  4. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 22/10/2026
  5. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 22/10/2026