macros

Macros en Excel con VBA: cómo crear la primera desde cero

octubre 26, 2026 Tuto Excel 13 min read
Macros en Excel con VBA: cómo crear la primera desde cero

Una macro de VBA es un pequeño programa que vive dentro de tu libro de Excel y automatiza tareas repetitivas: formatear, copiar, recorrer filas, generar informes. En este tutorial la grabas sin escribir código, la entiendes, la reescribes a mano y terminas lanzándola con un botón en la hoja de Ventas. Funciona en Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024, Microsoft 365 y Excel para Mac; Excel para la web no ejecuta macros VBA (allí se automatiza con Scripts de Office o con Python en Excel, si tu licencia lo trae).

Qué es una macro de VBA y para qué te sirve en Excel

Imagina la hoja Ventas de tu tienda. Cada lunes recibes un listado en crudo y haces lo mismo: seleccionas la fila de cabeceras, la pones en negrita, copias el rango, abres la hoja Resumen del mismo libro, pegas los datos y, al final, exportas a PDF. Son cinco minutos que repites sin pensar. Lección por lección, este tutorial le va a quitar a tu ratón ese trabajo.

Una macro no es magia ni un robot externo: es un conjunto de instrucciones escritas en Visual Basic for Applications (VBA) que se ejecuta dentro de Excel. Cuando grabas una macro, Excel traduce cada clic a una línea de código. Cuando la reproduces, ejecuta esas mismas líneas. VBA lleva en Excel desde 1994 y sigue siendo el lenguaje para automatizar Excel de escritorio.

Lo que una macro hace bien: formatear, mover datos entre hojas, recorrer filas, generar PDF, conectarse a bases de datos, crear formularios, reaccionar a clics en la hoja. Lo que NO hace: sustituir a Excel como aplicación general, ni ejecutarse en Excel para la web, ni correr en el móvil. Para cosas que cambian mucho se programa a mano; para lo que se repite igual cada semana, basta con grabar.

El editor de VBA y la grabadora de macros

Para empezar necesitas dos cosas: ver la pestaña Programador y abrir el editor de VBA con Alt+F11. La pestaña Programador viene oculta por defecto. Para mostrarla:

ArchivoOpcionesPersonalizar cinta de opciones

En la columna derecha marca la casilla Programador y pulsa Aceptar. Ahora, encima de la cinta, tienes una pestaña nueva con los botones Grabar macro, Visual Basic, Macros y los controles para insertar botones y formularios. La grabadora está en Programador > Código > Grabar macro.

El editor de VBA es una ventana aparte. La abres con Alt+F11 desde cualquier libro de Excel. Tiene un árbol a la izquierda con los libros y sus hojas, una ventana grande de código y, abajo, la Ventana Inmediato (con Ctrl+G). Para crear un sitio donde escribir código a mano, selección del proyecto del libro > Insertar > Módulo.

Grabar una macro sin escribir una sola línea de código

Empezamos con la hoja de ejemplo. Tienes un libro Ventas.xlsm con una hoja "Ventas" con esta forma:

A1fx**Fecha**
A B C D E F G H
1 Fecha Producto Cantidad Precio Total Vendedor Zona Estado
2 02/03/2026 Cuaderno 5 3,20 16,00 Ana Norte Pagado
3 02/03/2026 Lápiz 12 1,50 18,00 Ana Norte Pagado
4 02/03/2026 Goma 20 0,80 16,00 Luis Sur Pendiente
5 03/03/2026 Bolígrafo 30 1,10 33,00 Luis Sur Pendiente
6 03/03/2026 Carpeta 8 2,40 19,20 Marta Este Pagado
Ventas
  1. Selecciona el rango A2:H2 (la primera fila de datos).
  2. Pulsa Ctrl+N para ponerla en negrita.
  3. Pulsa Ctrl+C para copiarla.
  4. Crea una hoja nueva (botón derecho en la pestaña > Insertar > Hoja de cálculo) y llámala Resumen.
  5. Haz clic en A1 de la hoja Resumen y pulsa Ctrl+V para pegar.
  6. Abre el editor con Alt+F11. En el árbol, dentro de TuLibro > Módulos > Módulo1, está lo grabado.

El código generado se parece a esto:

Sub FormatoTitulos()
    ' Macro grabada el 02/03/2026
    Range("A2:H2").Select
    Selection.Font.Bold = True
    Selection.Copy
    Sheets("Resumen").Select
    Range("A1").Select
    ActiveSheet.Paste
End Sub

Las líneas que empiezan con comilla simple (') son comentarios en verde que Excel añade para que sepas qué hiciste en cada momento. Cambia el nombre de la macro a FormatoTitulos desde Programador > Código > Macros > Opciones.

Comprueba: en el editor ves líneas como Selection.Font.Bold = True y Sheets("Resumen").Select. Si no aparecen, repite los pasos sin tocar nada que la grabación no haya pedido.

El archivo tiene que ser .xlsm para guardar la macro

Cuando intentas guardar el libro, Excel te avisa: "El archivo contiene macros". Elige la extensión .xlsm (Libro de Excel habilitado para macros) y guárdalo. Si guardas como .xlsx, las macros desaparecen sin avisar.

Nota: los separadores de argumentos en las fórmulas de este tutorial son punto y coma (;), el formato de España y de la mayoría de países hispanohablantes. En Excel configurado con punto decimal (México, Estados Unidos), el separador es la coma (,).

Otro detalle clave: cuando descargas un .xlsm de internet, Excel bloquea las macros por seguridad. Para ejecutarlas, abre las Propiedades del libro (clic derecho sobre el archivo en el Explorador de Windows) y marca "Desbloquear".

El modelo de objetos de Excel: Application, Workbook, Worksheet y Range

Cada cosa que tocas en Excel es un objeto, y los objetos se contienen unos a otros como muñecas rusas:

Nivel Qué es Ejemplo en VBA
Application El propio Excel Application.ScreenUpdating = False
Workbook Un libro abierto Workbooks("Ventas.xlsm")
Worksheet Una hoja del libro Worksheets("Ventas")
Range Un rango de celdas Range("A2:H2")
Cell Una sola celda Cells(2, 1) (fila 2, columna 1 = A2)

Para leer el valor de A1: valor = Worksheets("Ventas").Range("A1").Value. Para escribir: Worksheets("Ventas").Range("A1").Value = "Hola". Para escribir una fórmula: Worksheets("Ventas").Range("E2").Formula = "=B2*C2".

La diferencia práctica entre Range("A1") y Cells(1, 1) es que Cells usa siempre números, lo que lo hace ideal para bucles (For i = 1 To 10). Con Rangeescribes la dirección literal, ideal para rangos fijos.

Escribir con código lo que antes grabaste

La macro FormatoTitulos que grabaste usa Select, que depende de qué celda esté activa. Vamos a reescribirla sin Select, accediendo directo a los objetos. La idea: misma hoja de antes, misma tarea de antes (poner la fila de cabeceras en negrita en la hoja "Resumen"), pero escrita a mano para que veas que entiendes cada línea.

Sub FormatoTitulos()
    Worksheets("Resumen").Range("A1:H1").Font.Bold = True
End Sub

Una sola línea hace lo mismo que las cinco grabadas. Sin seleccionar nada, sin copiar, sin pegar: la macro pinta directamente la fila de cabeceras en la hoja Resumen. Para probarla, abre el libro, pulsa Alt+F8, selecciona FormatoTitulos y pulsa Ejecutar.

Comprueba: la fila 1 de la hoja Resumen aparece en negrita. Si pulsas Ctrl+Z se deshace y ves que era la macro la que lo había aplicado.

Variables, condicionales y bucles: el código que decide y se repite

Tres piezas convierten una macro casu en algo útil de verdad.

Variables. Una variable es una cajita con nombre donde guardas algo. Se declaran con Dim antes de usarlas:

Dim i As Long          ' número entero grande
Dim nombre As String   ' texto
Dim total As Double    ' número con decimales
Dim encontrado As Boolean  ' verdadero o falso

Condicionales. If decide:

If stock < minimo Then
    Worksheets("Inventario").Cells(i, 4).Value = "Reponer"
Else
    Worksheets("Inventario").Cells(i, 4).Value = "OK"
End If

Bucles. For...Next repite algo un número de veces:

Dim i As Long
For i = 2 To 7
    ' aquí dentro, i vale 2, 3, 4, 5, 6, 7
Next i

Recorrer una columna y avisar si el stock baja del mínimo

Tienes una hoja "Inventario" en el mismo libro con productos, su stock actual y el mínimo que debería tener:

D2fxReponer
A B C D
1 Producto Stock Mínimo Aviso
2 Cuaderno 5 10 Reponer
3 Lápiz 30 15 OK
4 Goma 8 20 Reponer
5 Bolígrafo 50 25 OK
6 Carpeta 12 10 OK
7 Rotulador 4 15 Reponer
Inventario

La macro recorre la columna Stock (B2:B7) y, comparando con el Mínimo (C2:C7), escribe "Reponer" o "OK" en la columna Aviso:

Sub RecorrerStock()
    Dim i As Long
    Dim stock As Long
    Dim minimo As Long

    For i = 2 To 7
        stock = Worksheets("Inventario").Cells(i, 2).Value
        minimo = Worksheets("Inventario").Cells(i, 3).Value
        If stock < minimo Then
            Worksheets("Inventario").Cells(i, 4).Value = "Reponer"
        Else
            Worksheets("Inventario").Cells(i, 4).Value = "OK"
        End If
    Next i
End Sub

La columna D se llena con "Reponer" para Cuaderno, Goma y Rotulador, y "OK" para Lápiz, Bolígrafo y Carpeta.

Comprueba: la columna D aparece tal cual la tabla de arriba. Si la columna no cambia, mira que la macro está en el mismo libro y que el módulo donde la escribiste no tiene Option 1 tecleado por error.

Manejar errores sin que la macro se pare a la primera

Las macros fallan. Cuando copiabas el ejemplo anterior, seguro que te topaste con alguno de estos tres errores típicos:

Error 1: celda vacía en la columna numérica. Si B4 está en blanco, stock = ...Cells(4, 2).Value vale 0, y al comparar 0 < 20 el resultado es "Reponer" sin error. Pero si la celda contiene texto ("-" o "N/D"), VBA lanza el error 13, "no coinciden los tipos". Para que no pare la macro, añade al principio del Sub:

On Error Resume Next

Con esa línea, cuando algo falla, VBA ignora el error y sigue. Al final del Sub, justo antes de End Sub, imprime el último error con Debug.Print Err.Number y Debug.Print Err.Description en la Ventana Inmediato (Ctrl+G).

Error 2: la hoja renombrada. Si escribiste Worksheets("Inventario") y la hoja se llama "Stock", VBA lanza el error 9, "subíndice fuera del intervalo". Comprueba siempre los nombres en el Explorador de proyectos del editor (Alt+F11).

Error 3: división por cero o referencia a celda borrada. Error 11 o error 1004. La regla es: On Error Resume Next al principio para que la macro no se detenga, y Debug.Print Err.Number al final para saber qué ha pasado. Cuando termines de depurar, quita On Error Resume Next para que VBA vuelva a parar en errores reales.

Cuidado: On Error Resume Next tapa los errores, no los arregla. Si la macro no hace lo que esperas y la tienes devuelta, probablemente haya un error escondido detrás.

Convertir una macro en botón para lanzarla con un clic

La macro vive en un módulo, pero para lanzarla con un clic necesitas un botón. Volvemos a la hoja "Ventas":

  1. Abre la pestaña Programador > Controles > Insertar. Verás dos filas de iconos: los de la primera son Controles de formulario (los clásicos), los de la segunda son Controles ActiveX (más potentes, pero más complejos).
  2. En la primera fila, pulsa el icono "Botón" (el primero).
  3. El cursor se convierte en una cruz. Dibuja un rectángulo sobre la hoja, por ejemplo en J2:K3.
  4. Al soltar el ratón, aparece el cuadro "Asignar macro".
  5. Selecciona FormatoTitulos y pulsa Aceptar.
  6. Clic derecho sobre el botón > Modificar texto y escribe "Formatear títulos".
ProgramadorControlesInsertarBotón

Cada clic en el botón ejecuta la macro sobre la hoja Ventas, sin abrir el editor. Si prefieres el botón en la barra de arriba (al alcance del ratón siempre), añade el botón "Macros" a la barra de herramientas de acceso rápido: clic en la flechita de la barra > Más comandos > elige "Macros" en el desplegable > selecciona FormatoTitulos > Agregar > Modificar el icono si quieres.

D2fx3,20
A B C D E F G H
1 Fecha Producto Cantidad Precio Total Vendedor Zona Estado
2 02/03/2026 Cuaderno 5 3,20 16,00 Ana Norte Pagado
3 02/03/2026 Lápiz 12 1,50 18,00 Ana Norte Pagado
4 02/03/2026 Goma 20 0,80 16,00 Luis Sur Pendiente
5 03/03/2026 Bolígrafo 30 1,10 33,00 Luis Sur Pendiente
6 03/03/2026 Carpeta 8 2,40 19,20 Marta Este Pagado
Ventas
Comprueba: ves un botón con el rótulo "Formatear títulos" sobre la hoja Ventas. Al hacer clic, la fila de cabeceras de la hoja Resumen se pone en negrita.

Lo que VBA puede y lo que no en tu versión de Excel

VBA está disponible en Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024, Microsoft 365 y Excel para Mac. El editor se abre siempre con Alt+F11 (en Mac, también Alt+F11 si la tecla está disponible, o desde el menú Desarrollador). Excel para móviles (Android, iPhone, iPad) trae el editor VBA en algunas versiones de tablet y permite ejecutar macros, pero no es el entorno ideal para escribirlas.

Lo que VBA no hace:

  • No ejecuta en Excel para la web. Allí se automatiza con Scripts de Office (que también se programan con TypeScript) o con Python en Excel (si tu licencia de Microsoft 365 lo trae activado).
  • Es lento recorriendo celda a celda. Si recorres 50.000 filas con un For, la macro tarda segundos. Para acelerar, añade al principio del Sub: Application.ScreenUpdating = False, Application.Calculation = xlCalculationManual. Trabaja con matrices en memoria: lee todo el rango a una variable Variant, procesa el array y escríbelo de vuelta. Eso multiplica la velocidad por 10 o por 100.
  • No accede a internet sin permisos. Si necesitas llamar a un servicio web, hay que configurar la referencia a Microsoft XML o usar CreateObject("MSXML2.ServerXMLHTTP").
Nota: Microsoft avisa periódicamente de que VBA queda como característica heredada para Windows y Mac para escritorio. No hay fecha de retirada en el ciclo de vida oficial; las funciones nuevas de Excel (matrices dinámicas, LET, LAMBDA) viven en el motor de fórmulas, no en VBA, y se pueden leer y escribir desde VBA pero no se ejecutan como macros.

Lo que ya sabes hacer con macros y por dónde seguir

  • Grabar una macro con Programador > Código > Grabar macro y leer el código generado en el módulo.
  • Cambiar a la pestaña Programador desde Archivo > Opciones > Personalizar cinta de opciones.
  • Escribir un Sub a mano en un módulo, accediendo a hojas con Worksheets("...") y a celdas con Range(...) o Cells(...).
  • Recorrer una hoja con un bucle For...Next y comparar valores con If...Then...Else.
  • Asignar una macro a un botón sobre la hoja desde Programador > Controles > Insertar > Botón.

El siguiente paso natural son las herramientas de depuración: poner un punto de interrupción (clic en el margen izquierdo junto a una línea, o F9) para parar la macro en esa línea y avanzar paso a paso con F8, escribir en la Ventana Inmediato (Ctrl+G) para probar expresiones como Debug.Print Worksheets("Ventas").Cells(2, 5).Value, y abrir la Ventana Inspección (menú Ver > Ventana inspección) para ver cómo cambia una variable mientras la macro corre.

Datos comprobados en octubre de 2026.

Dudas al usar macros de Visual Basic en Excel

1. ¿Qué es VBA en Excel?

VBA (Visual Basic for Applications) es el lenguaje de programación que viene integrado en Excel y permite automatizar tareas repetitivas, crear funciones propias y diseñar formularios. Se activa mostrando la pestaña Programador desde Archivo > Opciones > Personalizar cinta de opciones. Está disponible en las versiones de escritorio de Excel para Windows.

2. ¿Cómo se empieza a escribir código VBA en Excel?

Pulsa Alt+F11 para abrir el editor de Visual Basic, inserta un módulo desde Insertar > Módulo y escribe tu primera macro dentro de él. Después asigna esa macro a un botón o a un atajo desde Programador > Macros. El código se guarda en archivos con extensión .xlsm, no en .xlsx.

3. ¿Cuál es la diferencia entre VBA y Visual Basic .NET?

VBA es un lenguaje ligado a Office que vive dentro del archivo y sirve para automatizar Excel y otros programas de la suite. Visual Basic .NET es un lenguaje independiente de Microsoft, con su propio entorno (Visual Studio), usado para crear aplicaciones de escritorio, web y servicios. Comparten sintaxis, pero son plataformas distintas.

4. ¿Cómo se graba una macro en Excel paso a paso?

Ve a Programador > Grabar macro, ponle un nombre, acepta y realiza las acciones que quieras automatizar; al terminar pulsa Detener grabación. Verás el código generado pulsando Alt+F11, en la carpeta Módulos del libro. Es la forma más rápida de aprender VBA: Excel escribe el código por ti mientras tú trabajas.

5. ¿Es seguro descargar Visual Basic 2010 hoy?

Microsoft ya no distribuye Visual Basic 2010 de forma oficial y solo ofrece soporte de seguridad ampliado a través del portal de soporte para empresas. Para empezar con VBA en Excel no necesitas instalarlo: el editor Alt+F11 ya viene integrado en Excel. Si buscas Visual Studio, la versión actual es Visual Studio 2022.

Fuentes

  1. MicrosoftIs there successor to the VBA for excel? – Microsoft Q&Aconsultado el 07/10/2026
  2. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 07/10/2026
  3. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 07/10/2026
  4. MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 07/10/2026