macros

Cómo usar If Then Else en una macro de Excel (VBA) con ejemplos

noviembre 2, 2026 Tuto Excel 14 min read
Cómo usar If Then Else en una macro de Excel (VBA) con ejemplos

Una macro de Excel es un pequeño programa escrito en VBA que repite por sí solo las tareas que haces a mano. Cuando dentro de la macro escribes un SI (en VBA, If … Then), el programa decide, fila a fila, qué texto dejar en cada celda según el valor que encuentre. Aquí lo vamos a aplicar a una hoja de ventas: una macro que recorra las ventas del día, marque «Revisar» las que bajen de 1.000 y deje «OK» en el resto. Funciona en Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024 y Microsoft 365, en Windows y en Mac. Excel para la web no ejecuta macros VBA, así que allí toca repetirlas con Scripts de Office o a mano. Al terminar vas a saber grabar una macro, escribir un If con dos ramas, anidarlo y, además, leerás los tres errores que más atascan a quien empieza.

Qué es una macro y por qué le añade un SI dentro

Una macro es un bloque de código VBA que Excel ejecuta cuando se lo pides: al pulsar un botón, al abrir el libro o al hacer clic en un menú. Dentro de ese código puede haber un SI, igual que en una celda escribes =SI(A2>10;"Alto";"Bajo"), pero escrito en lenguaje VBA: If ventas < 1000 Then … End If.

La gracia está en lo que VBA hace y una fórmula no: recorrer cientos o miles de celdas, mirar cada una y dejar un resultado distinto sin que tú tengas que arrastrar nada. Imagina la hoja de ventas del mes. Copiar la fórmula =SI(B2<1000;"Revisar";"OK") hacia abajo funciona, sí, pero tienes que arrastrarla cada vez que entran datos nuevos. Una macro con If mira la columna B, decide y rellena la columna C sola, tantas veces como la lances. Y, además, puede abrir libros, enviar correos o guardar un PDF al final.

Nota: VBA vive dentro del libro de Excel, no en la nube. Si tu archivo está en OneDrive y lo abres desde el navegador, la macro no se ejecuta: necesitas abrirlo en el escritorio.

Las piezas del editor de VBA que vas a usar

Para escribir macros se usa el editor de Visual Basic, una ventana aparte que abres con Alt+F11. Ahí dentro vas a tocar siempre las mismas cuatro zonas.

  • Explorador de proyectos (a la izquierda): lista los libros abiertos y, dentro de cada uno, sus hojas y sus módulos. Un módulo es una hoja en blanco donde se pega el código.
  • Ventana de código (en el centro): el papel donde escribes los Sub y las funciones. Cada Sub es una macro independiente.
  • Ventana Inmediato (abajo): una consola donde escribes ?Variable y das Entrar para ver el valor de una variable, o Debug.Print "texto" desde el código para volcar mensajes.
  • Menú Insertar > Módulo: cada macro va en un módulo; si no hay ninguno, lo creas desde este menú.

Para volver a Excel sin cerrar el editor, Alt+Q o Alt+F11 otra vez.

La estructura de un SI en VBA: If, ElseIf y Else

La traducción de =SI en VBA es If … Then … Else … End If. Si la condición se cumple, VBA ejecuta lo que hay entre Then y Else; si no, ejecuta lo que hay entre Else y End If. Y si quieres más de dos ramas, encadenas ElseIf antes del Else.

La sintaxis es:

If ventas < 1000 Then
    resultado = "Revisar"
Else
    resultado = "OK"
End If

If y End If son obligatorios: VBA necesita saber dónde empieza y dónde acaba la decisión. ElseIf y Else son opcionales y se usan cuando hay más de un caso. El sangrado (un Tab al principio de cada línea de dentro) no es obligatorio para que funcione, pero es la única forma de leer un If cuando crece.

Nota: en Excel configurado con punto decimal (México, Estados Unidos) el separador de argumentos en las fórmulas es la coma, no el punto y coma.

Comparaciones con números, textos y fechas

La condición dentro de un If usa los mismos operadores que las fórmulas: =, <>, >, >=, <, <=. Con textos se compara entre comillas dobles; con fechas, entre almohadillas #.

Operador Significado Ejemplo en VBA Resultado
= Igual If zona = "Norte" Then Verdadero si la celda contiene exactamente Norte
<> Distinto If estado <> "Pagado" Then Verdadero si no está pagado
> Mayor If ventas > 1000 Then Verdadero si la venta supera 1.000
>= Mayor o igual If nota >= 5 Then Verdadero con 5 o más
< Menor If stock < 10 Then Verdadero si queda poco
<= Menor o igual If edad <= 18 Then Verdadero hasta 18 incluido
Like Patrón con comodines If nombre Like "*García*" Then Verdadero si contiene García

Con fechas, VBA exige el formato mes/día/año entre almohadillas: #1/15/2026# para el 15 de enero de 2026. Y ojo: VBA compara textos sin distinguir mayúsculas, «norte» y «Norte» son iguales para él.

Anidar varios SI sin liarse

Cuando tienes más de dos tramos —por ejemplo Bajo, Medio y Alto—, puedes anidar If dentro de If. La idea es leer cada If de arriba abajo: la primera condición que se cumple gana.

If ventas < 500 Then
    nivel = "Crítico"
ElseIf ventas < 1000 Then
    nivel = "Bajo"
ElseIf ventas < 2000 Then
    nivel = "Medio"
Else
    nivel = "Alto"
End If

ElseIf se escribe junto, sin espacio, y VBA evalúa cada uno hasta dar con el primero que se cumple. Si ninguno, ejecuta Else. Este código hace lo mismo que =SI.CONJUNTO(B2<500;"Crítico";B2<1000;"Bajo";B2<2000;"Medio";VERDADERO;"Alto") en la hoja, así que si solo trabajas con la fórmula, SI.CONJUNTO (en inglés IFS), desde Excel 2019, es más limpio.

Activar la pestaña Programador y grabar tu primera macro

Antes de escribir código a mano, conviene ver qué hace Excel por ti cuando grabas. La pestaña Programador viene oculta y hay que encenderla.

ArchivoOpcionesPersonalizar cinta de opciones
  1. Abre Excel y entra en Archivo > Opciones.
  2. En la ventana, elige Personalizar cinta de opciones.
  3. En la columna derecha, marca la casilla Programador y pulsa Aceptar.
Comprueba: la pestaña Programador aparece al final de la cinta, al lado de Vista y Ayuda.

Ahora graba una macro tonta para ver qué genera VBA.

  1. Abre un libro nuevo y ve a Programador > Código > Grabar macro.
  2. Nombre: MiPrimera. Guardar en: Libro de macros personal. Aceptar.
  3. Selecciona la celda A1, escribe Hola y pulsa Entrar.
  4. Vuelve a Programador > Código > Detener grabación.
  5. Pulsa Alt+F11 para abrir el editor. En Módulos > Módulo1 tienes el código que Excel escribió por ti.

Sub MiPrimera()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Hola"
End Sub

Ya tienes tu primer programa en VBA. A partir de aquí vas a escribirlo tú, a mano, porque escribir a mano es más rápido que grabar para cualquier cosa con un If dentro.

Crear una macro con un SI que decide qué escribir en cada fila

Volvemos a la hoja de ventas. Empiezas con esta hoja, tal cual la escribirías a mano.

B2fx850
A B
1 Cliente Venta
2 Ana 850
3 Berta 1.250
4 David 1.980
5 Eva 420
6 Fer 2.100
7 Gema 760
8 Hugo 1.500
9 Inés 3.250
Ventas

La macro va a recorrer la columna B, y si la venta baja de 1.000, escribirá «Revisar» en la misma fila de la columna C. Si no, escribirá «OK».

  1. Abre el archivo de ventas y, si no la tienes, activa la pestaña Programador como en la sección anterior.
  2. Pulsa Alt+F11 para abrir el editor.
  3. En el menú Insertar > Módulo, pega el código de la subsección siguiente.
  4. Cierra el editor con Alt+Q.
  5. Vuelve a la hoja y pulsa Alt+F8, elige RevisarVentas y pulsa Ejecutar.
Comprueba: la columna C queda con «Revisar» en las filas 2, 5 y 7, y «OK» en el resto.

El código entero, listo para copiar y pegar

Sub RevisarVentas()
    ' Declara la celda que vamos a mirar
    Dim celda As Range
    ' Recorre cada celda del rango de ventas B2:B9
    For Each celda In Worksheets("Ventas").Range("B2:B9")
        ' Si la venta es menor que 1.000, marca Revisar
        If celda.Value < 1000 Then
            ' Escribe en la columna C, una fila a la derecha
            celda.Offset(0, 1).Value = "Revisar"
        ' Si no, marca OK
        Else
            celda.Offset(0, 1).Value = "OK"
        End If
    ' Cierra el If y el bucle
    Next celda
End Sub

For Each celda In … recorre cada celda del rango sin que tengas que escribir un contador. celda.Offset(0, 1) se mueve una columna a la derecha (el 0 son filas, el 1 son columnas). Los comentarios con la comilla simple ' los puedes borrar; VBA los ignora.

Asignar la macro a un botón en la hoja

Teclear Alt+F8 cada vez es pesado. Mejor un botón dibujado en la propia hoja, al lado de los datos.

InsertarIlustracionesFormas
  1. En la hoja Ventas, ve a Insertar > Ilustraciones > Formas y elige la del rectángulo redondeado.
  2. Dibuja el botón al lado de la tabla, por ejemplo en E1, y escribe dentro Revisar ventas.
  3. Clic derecho sobre la forma y elige Asignar macro.
  4. Selecciona RevisarVentas en la lista y pulsa Aceptar.
  5. Clic fuera del botón para deseleccionar.

Sub RevisarVentas()
    Dim celda As Range
    For Each celda In Worksheets("Ventas").Range("B2:B9")
        If celda.Value < 1000 Then
            celda.Offset(0, 1).Value = "Revisar"
        Else
            celda.Offset(0, 1).Value = "OK"
        End If
    Next celda
End Sub
Comprueba: al hacer clic en el botón, la columna C se rellena con «Revisar» u «OK» según la venta de cada fila.

Una macro con SI.CONJUNTO en vez de If anidados

La misma hoja, ahora con cuatro tramos: Crítico (< 500), Bajo (500 a 999), Medio (1.000 a 1.999) y Alto (>= 2.000). En VBA, lo limpio es Select Case, que es el equivalente de SI.CONJUNTO: evalúa el valor una vez y salta al primer caso que encaje.

B2fx850
A B C
1 Cliente Venta Nivel
2 Ana 850
3 Berta 1.250
4 David 1.980
5 Eva 420
6 Fer 2.100
7 Gema 760
8 Hugo 1.500
9 Inés 3.250
Ventas

Sub ClasificarVentas()
    Dim celda As Range
    Dim nivel As String
    For Each celda In Worksheets("Ventas").Range("B2:B9")
        Select Case celda.Value
            Case Is < 500
                nivel = "Crítico"
            Case 500 To 999.99
                nivel = "Bajo"
            Case 1000 To 1999.99
                nivel = "Medio"
            Case Is >= 2000
                nivel = "Alto"
        End Select
        celda.Offset(0, 1).Value = nivel
    Next celda
End Sub

Select Case celda.Value toma el valor de la celda una sola vez. Case Is < 500 cubre los críticos; Case 500 To 999.99 cubre el tramo bajo sin escribir un If con dos condiciones; Case Is >= 2000 cierra por arriba. Case Else existe para el «en otro caso», aquí no hace falta porque todos los valores numéricos caen en algún tramo.

Comprueba: la columna C queda con Crítico en E2 y E5; Bajo en E3 y E7; Medio en E4 y E8; Alto en E6 y E9.

Por qué tu macro con SI no hace lo que esperas

Tres fallos aparecen una y otra vez cuando se empieza con If en VBA. Vale la pena verlos con la hoja abierta delante.

El SI compara texto y números sin comillas

Escribes If ventas < 1000 Then y VBA te suelta «No coinciden los tipos». La celda trae un texto ("850" guardado como cadena), no un número. Se arregla convirtiendo el valor antes de comparar, con CLng para enteros o Val para números en general.

B2fx
A B
1 Ana 850
Ventas

' Falla: B2 contiene "850" como texto
If Worksheets("Ventas").Range("B2").Value < 1000 Then
    MsgBox "Menor"
End If

' Arreglo: convertir a número antes de comparar
If CLng(Worksheets("Ventas").Range("B2").Value) < 1000 Then
    MsgBox "Menor"
End If
Cuidado: CLng redondea; con decimales usa CDbl.

La macro se ejecuta pero no se ve nada

La macro corre, no da error, pero la columna C sigue vacía. Casi siempre es porque la hoja activa no es Ventas: el código escribe en la hoja que esté seleccionada, no en la que tú crees.

C2fx
A B
1
2
Hoja2

' Mal: si la hoja activa es Hoja2, escribe ahí
Range("C2").Value = "Revisar"

' Bien: apunta siempre a la hoja por su nombre
Worksheets("Ventas").Range("C2").Value = "Revisar"

Excel bloquea la macro al abrir el archivo

Abres el .xlsm y ves una franja amarilla: «Las macros se han deshabilitado». Es la protección que Microsoft aplica a los archivos descargados de internet o recibidos por correo. Se desbloquea en sus Propiedades.

  1. Clic derecho sobre el archivo en el Explorador de Windows > Propiedades.
  2. En la pestaña General, marca Desbloquear y pulsa Aceptar.
  3. Vuelve a abrir el archivo en Excel.
Cuidado: la opción Desbloquear solo sale si el archivo está bloqueado. Si no la ves, no está bloqueado.

Si trabajas siempre con los mismos archivos, añade su carpeta a las Ubicaciones de confianza desde Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Ubicaciones de confianza, y Excel no volverá a molestarte con esa carpeta.

Dónde VBA no llega y qué usar en su lugar

VBA necesita el escritorio de Windows o de Mac. En Excel para la web las macros VBA no corren; allí la automatización se hace con Scripts de Office o con Power Automate. Si tu archivo es .xlsx y lo abre un compañero desde el navegador, los botones no harán nada.

Para decidir si te conviene VBA o una fórmula, mira esto:

  • Si la lógica vive en una celda y se arrastra, usa SI (en inglés IF), SI.ERROR o SI.CONJUNTO (IFS, desde Excel 2019) en la propia celda. Más sencillo de mantener.
  • Si la lógica recorre un rango, abre otro libro, manda un correo o crea un PDF, VBA es lo que toca.
  • Si la macro se vuelve lenta con muchos Select o Activate, mete los datos en un array en memoria con Range.Value, trábaja ahí y vuelve a escribir con Range.Resize(, ).Value = matriz. La diferencia se nota a partir de unos pocos miles de filas.
Nota: un libro con macros se guarda como .xlsm; en .xlsx las macros se pierden al guardar. Y antes de pasar el archivo, comprueba que la versión de Excel del destinatario ejecuta VBA (la web y algunas versiones móviles no).

Lo que ya sabes hacer con macros y SI

  • Abrir el editor con Alt+F11, crear un módulo y escribir una macro Sub … End Sub.
  • Recorrer un rango con For Each celda In … y decidir con If … Then … Else … End If qué dejar en cada fila.
  • Encadenar ramas con ElseIf o sustituir varios If por una estructura Select Case.
  • Asignar la macro a un botón en la hoja y desbloquear un archivo con macros para que arranque.

El siguiente paso natural es usar la grabadora de macros como profesora: graba una acción que uses a menudo (dar formato, filtrar, guardar PDF), mira el código que escribe Excel y adivina qué hace cada línea. Así se aprende el nombre real de los objetos: Selection, ActiveSheet, ThisWorkbook.Save, ActiveSheet.PivotTables. Empieza por una grabación corta y ve quitando lo que sobra.

Dudas al usar macros con SI en VBA

  • ¿Qué pasa si mi Excel está en inglés? Las funciones de la hoja se llaman igual (IF, IFS, IFERROR) y VBA es en inglés siempre (If, Then, Else, End If), así que nada cambia.
  • ¿Por qué mi macro funciona una vez y a la segunda falla? Suele ser porque la hoja activa no es la que toca, o porque el rango se quedó con los datos de la primera ejecución. Apunta siempre a la hoja por nombre: Worksheets("Ventas").Range(...).
  • ¿Puedo usar SI.CONJUNTO dentro de VBA? No como fórmula: VBA no evalúa fórmulas de hoja. Su equivalente es Select Case, que es lo que hemos visto arriba.
  • ¿Cómo guardo un libro con macros? Archivo > Guardar como > Libro de Excel habilitado para macros (.xlsm). En .xlsx las macros se borran al guardar.
  • ¿Sirve esto en Excel para la web o en el móvil? No. VBA solo corre en Excel de escritorio (y en algunos planes de Mac). En la web usa Scripts de Office.
  • ¿Puedo hacer que la macro se ejecute al abrir el archivo? Sí, con Sub Workbook_Open() dentro del módulo ThisWorkbook. Cada vez que abras el libro, Excel lanza esa macro sola.

Datos verificados en octubre de 2026.

Fuentes

  1. Microsoft2007 Office Excel Macro not working in Excel 2026 – Microsoft Learnconsultado el 12/10/2026
  2. MicrosoftPROMEDIO.SI — documentación oficialconsultado el 12/10/2026
  3. MicrosoftCONTAR.SI — documentación oficialconsultado el 12/10/2026
  4. MicrosoftCONTAR.SI.CONJUNTO — documentación oficialconsultado el 12/10/2026
  5. MicrosoftSIFECHA — documentación oficialconsultado el 12/10/2026