VBA es el lenguaje con el que puedes pedirle a Excel que realice tareas repetitivas. En este tutorial crearás un libro de inventario, grabarás una macro, revisarás el código generado y calcularás los totales de varios productos sin escribir una fórmula en cada celda.
El procedimiento funciona en Excel 2007 para Windows, aunque su soporte técnico terminó en octubre de 2017. El grabador de macros y el editor de VBA siguen siendo la vía más clara para pasar de una acción manual a una automatización que puedas revisar y modificar.
Qué es VBA y qué puede automatizar en Excel
VBA significa Visual Basic for Applications. En Excel, permite convertir una secuencia de acciones en código: escribir textos, modificar formatos, recorrer una tabla o mostrar mensajes al terminar una tarea.
Piensa en la hoja Inventario de una tienda. Contiene productos, existencias y precio. Al incorporarse un producto nuevo, alguien debe escribir su valor total. Una macro puede recorrer las filas y calcular D2:D6 automáticamente.
Para observar el proceso, primero usaremos el grabador de macros. Este registra acciones como escribir «Hola» en A1 y genera código equivalente. No sustituye a una buena revisión: sirve para obtener un ejemplo que puedas leer y adaptar.
En lugar de imaginative una automatización completa desde cero, grabaremos una acción sencilla y después analizaremos sus componentes. La referencia oficial de Microsoft describe VBA como una herramienta para automatizar tareas repetitivas, manipular datos y ampliar la interacción con el usuario.
Dónde está el editor de VBA y cómo se activa
El editor de VBA se abre con Alt+F11. Para crear código, utiliza Insertar > Módulo dentro de ese editor. El atajo Alt+F8 permite abrir después la lista de macros.
En Excel 2007, la pestaña que contiene algunos controles de macro puede aparecer como Programador o Desarrollador, según la configuración linguistic. Si no la ves, actívala así:
- Abre Archivo > Opciones.
- Selecciona Personalizar cinta de opciones.
- En la lista de pestañas principales, marca Programador.
- Pulsa Aceptar.
Tu primera macro paso a paso
Crea un libro nuevo y añade una hoja llamada Inventario. Escribe estos datos:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Existencias | Precio | Total |
| 2 | Cuaderno | 4 | 3,50 | 14,00 |
| 3 | Bolígrafo | 10 | 1,20 | 12,00 |
| 4 | Goma | 8 | 0,80 | 6,40 |
| 5 | Regla | 6 | 2,10 | 12,60 |
| 6 | Marcador | 5 | 1,50 | 7,50 |
Después añade la macro mediante Programador > Grabar macro. En Excel 2007, la ruta puede aparecer como Desarrollador > Grabar macro.
- Escribe Saludo como nombre.
- Deja la ubicación en Este libro.
- Pulsa Aceptar.
- Selecciona A1 y escribe
Hola. - Pulsa Programador > Detener grabación.
- Abre el editor con Alt+F11.
La macro ha quedado en un módulo del libro. En Excel 2007, el nombre de una hoja dentro del código también puede aparecerRAN en inglés, como Sheet1, según la versión y el idioma.
Sub con el nombre Saludo y dentro se distingue la asignación de Hola a A1.El Sub, el Range y el MsgBox del ejemplo
El grabador crea una estructura parecida a esta:
Sub Saludo()
Range("A1").Value = "Hola"
MsgBox "Listo"
End Sub
Sub Saludo() inicia el procedimiento. End Sub lo termina. La línea central usa Range("A1") para seleccionar la celda A1 y .Value para escribir el texto Hola.
MsgBox "Listo" abre una ventana con el mensaje. No cambia la hoja; solo informa al usuario de que la macro llegó al final.
Dónde queda el código después de cerrar el editor
El código queda guardado en un módulo del propio libro, no en una ventana independiente que debas conservar.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Hola | Existencias | Precio | Total |
| 2 | Cuaderno | 4 | 3,50 | 14,00 |
| 3 | Bolígrafo | 10 | 1,20 | 12,00 |
| 4 | Goma | 8 | 0,80 | 6,40 |
| 5 | Regla | 6 | 2,10 | 12,60 |
| 6 | Marcador | 5 | 1,50 | 7,50 |
- Cierra el editor con Alt+Q.
- Abre la lista de macros con Alt+F8.
- Selecciona Saludo.
- Pulsa Ejecutar.
Automatizar una tabla sin tocar cada celda
Ahora quitaremos Hola de A1 y crearemos una macro que recorra las cinco filas del inventario. El resultado esperado es el total de cada producto.
Abre el editor con Alt+F11, inserta un módulo y escribe:
Sub CalcularTotales()
Dim i As Long
For i = 2 To 6
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i
MsgBox "Totales calculados"
End Sub
- Ejecuta CalcularTotales con Alt+F8.
- Observa los resultados en D2:D6.
- Corrige, si es necesario, un precio o una cantidad y vuelve a ejecutar la macro.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Existencias | Precio | Total |
| 2 | Cuaderno | 4 | 3,50 | 14,00 |
| 3 | Bolígrafo | 10 | 1,20 | 12,00 |
| 4 | Goma | 8 | 0,80 | 6,40 |
| 5 | Regla | 6 | 2,10 | 12,60 |
| 6 | Marcador | 5 | 1,50 | 7,50 |
Cells(fila, columna) y Range con dos direcciones
Cells(i, 4) representa una celda mediante números: primero la fila y después la columna. Cuando i vale 2, Cells(i, 4) es D2; cuando vale 6, es D6.
Range("D2") utiliza el formato de dirección de Excel. Ambos sistemas sirven para leer o escribir una celda. La diferencia práctica está en cambiar la dirección de una fila a otra: con Cells, cambia la variable i; con Range, habría que construir o cambiar la cadena.
En el ejemplo, Cells(i, 2) lee las existencias y Cells(i, 3) lee el precio. El resultado se escribe en Cells(i, 4).
Escribir fórmulas con Formula y FormulaR1C1
En lugar de calcular el total y convertirlo en un valor, podemos escribir una fórmula en cada fila. Añade este código:
Sub TotalesConFormula()
Range("D2:D10").FormulaR1C1 = "=RC[-2]*RC[-1]"
End Sub
RC[-2] significa dos columnas a la izquierda de la celda actual; RC[-1], una columna a la izquierda. Excel ajusta esas referencias para cada fila.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Producto | Existencias | Precio | Total |
| 2 | Cuaderno | 4 | 3,50 | 14,00 |
| 3 | Bolígrafo | 10 | 1,20 | 12,00 |
| 4 | Goma | 8 | 0,80 | 6,40 |
| 5 | Regla | 6 | 2,10 | 12,60 |
| 6 | Marcador | 5 | 1,50 | 7,50 |
| 7 | ||||
| 8 | ||||
| 9 | ||||
| 10 |
=B2*C2; D3 contiene =B3*C3 y así hasta D10. Si cambias B3, el total de esa fila se actualizará.Por qué Formula exige inglés y coma
Las propiedades .Formula y .FormulaR1C1 escriben fórmulas con la sintaxis del modelo de objetos: nombres de función en inglés y coma como separador. .FormulaLocal y .FormulaR1C1Local emplean el idioma y la configuración regional del usuario.
=SUM(A2:B2)
=SUMA(A2:B2)
Range("E2").Formula = "=SUM(A2:B2)"
Range("F2").FormulaLocal = "=SUMA(A2:B2)"
No intercambies ambas formas: .Formula no reconoce SUMA, mientras que .FormulaLocal sí utiliza el nombre localizado.
Guardar el libro con macros sin perderlas
Un libro normal .xlsx no conserva macros. Para mantener el código de Saludo y CalcularTotales, guarda el inventario como Libro de Excel habilitado para macros, con extensión .xlsm.
- Abre Archivo > Guardar como.
- Elige la carpeta de trabajo.
- En Tipo, selecciona *Libro de Excel habilitado para macros (.xlsm)**.
- Mantén el nombre Inventario.
- Pulsa Guardar.
- Confirma que quieres conservar el formato con VBA.
Si eliges .xlsx, Excel muestra una advertencia: el formato actual puede conservarVBAmacros. Si continúas y guardas en ese formato, las macros se eliminan del archivo.
.xlsm sigue siendo un archivo de Excel con código ejecutable y debe repartirse con cautela.Los errores más comunes al ejecutar tu macro
El error 1004 al escribir una fórmula
El mensaje «Se ha producido el error '1004' en tiempo de ejecución» aparece al asignar =SUMA(...) mediante .Formula. La causa es que esta propiedad exige el nombre inglés SUM y la coma como separador.
Range("E2").Formula = "=SUM(A2:B2)"
La alternativa localizada es:
Range("F2").FormulaLocal = "=SUMA(A2:B2)"
La primera forma es la más-portable para código guardado en distintas instalaciones de Excel. Revisa también los paréntesis y que falte ningún signo de igualdad.
Una macro descargada que Excel no ejecuta
Excel 2007 bloquea por defecto las macros de archivos descargados. En el botón Office, abre Propiedades y busca la sección de seguridad.
- Pulsa el botón Office.
- Selecciona Propiedades.
- En Seguridad, pulsa Habilitar contenido.
- Cierra las propiedades.
- Ejecuta la macro con Alt+F8.
Otro fallo habitual es olvidar End Sub. En ese caso, VBA señala la instrucción incompleta y no puede compilar el procedimiento. La estructura mínima debe ser:
Sub Saludo()
Range("A1").Value = "Hola"
End Sub
Lo que VBA hace y lo que no en Excel 2007
Excel 2007 admite el editor de VBA, la grabación de macros, procedimientos Sub, bucles y objetos básicos como Range, Cells, Worksheet y Workbook. También permite guardar el código en .xlsm.
| Capacidad | Excel 2007 | Microsoft 365 |
|---|---|---|
| Grabar y editar macros VBA | Sí | Sí |
Usar Range, Cells y Worksheet |
Sí | Sí |
Guardar el libro como .xlsm |
Sí | Sí |
| Herramientas y construcciones de VBA más recientes | Limitadas | Ampliadas |
| Compatibilidad absoluta entre libros y versiones | No garantizada | No garantizada |
Una macro antigua puede seguir funcionando, pero algunos objetos, propiedades o formas de escribir instrucciones cambian. Si falla al abrirla en otra versión, copia sus instrucciones al editor de esa versión y pruébala por partes. En Excel 2007 y Microsoft 365 pueden existir diferencias de compatibilidad.
Lo que ya sabes hacer con VBA
- Abrir el editor de VBA con Alt+F11 e insertar un módulo.
- Activar la pestaña Programador desde Personalizar cinta de opciones.
- Grabar una acción y revisar el código generado.
- Entender
Sub Saludo(),Range("A1").Value,MsgBoxyEnd Sub. - Recorrer una tabla con
ForyNext, usandoCells(fila, columna). - Escribir fórmulas ajustables con
Range.FormulaR1C1. - Diferenciar
Formulaen inglés deFormulaLocalen español. - Guardar el libro con macros en formato
.xlsm.
Tu siguiente paso es abrir el libro de inventario, crear una copia y sustituir el mensaje del MsgBox por una operación que reemplace por datos reales. Consulta la documentación oficial de Microsoft Learn sobre VBA y la referencia de Range.Formula y Range.FormulaR1C1 antes de ampliar la macro.
Los datos de este tutorial están comprobados en octubre de 2026.
Dudas al aprender VBA en Excel 2007
1. ¿Dónde encuentro ejemplos de VBA para Excel?
No necesitas instalar nada aparte para usar el ejemplo. En Excel 2007, abre el editor con Alt+F11, inserta un módulo y escribe o pega el código; después ejecútalo desde la macro elegida con Alt+F8.
2. ¿Qué necesito para aprender Excel VBA?
Necesitas Excel 2007 para Windows y una copia de seguridad del libro antes de probar cambios. Excel 2007 admite macros, pero su soporte terminó en octubre de 2017; los datos y funciones del artículo se comprobaron en octubre de 2026.
3. ¿Qué es programar con VBA?
Es escribir instrucciones que Excel utiliza para realizar tareas o responder a acciones. En este tutorial, un Sub escribe un valor, un bucle For calcula totales y un MsgBox confirma que terminó la operación.
4. ¿Microsoft Excel es compatible con macros VBA?
Sí. Excel 2007 admite macros VBA y permite guardarlas en libros .xlsm; un .xlsx no conserva esas macros. En versiones posteriores hay más funciones, pero una macro antigua puede necesitar ajustes al ejecutarse.
5. ¿Dónde puedo encontrar 2.500 ejemplos de VBA en PDF?
La documentación oficial de Microsoft Learn ofrece Introducción a VBA y referencias del modelo de objetos para consultar por temas. Para-examples-completos, resulta más útil estudiar una macro grabada, modificarla y comprobar el resultado en un libro de prueba.
6. ¿Qué código VBA necesito para automatizar una tabla?
En el tutorial se usa un bucle For y la propiedad Cells(fila, columna).Value para calcular cinco totales. También se asigna una fórmula a D2:D10 con Range.FormulaR1C1, que ajusta las referencias automáticamente.
7. ¿Cómo descargo VBA para Excel?
No necesitas descargar VBA por separado: forma parte de Excel 2007 para Windows. Abre el editor con Alt+F11 y crea un módulo desde Insertar > Módulo; guarda el libro como .xlsm para conservar el código.
8. ¿Dónde está la documentación oficial de VBA para Excel?
La guía oficial de Microsoft Learn explica cómo grabar una macro, editar código y usar el modelo de objetos de Office. También puedes consultar la referencia de Range.Formula y Range.FormulaR1C1 para entender cómo se escriben las fórmulas desde VBA.
Fuentes
- MicrosoftIs there a difference in Excel 2007 and Excel 365 with respect to …consultado el 28/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 28/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 28/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 28/10/2026