Todo sobre la función Automatiza Decisiones con Flujos de Control en Macros de Excel en Excel
excel-facil

Introducción

¿Alguna vez te has encontrado repitiendo la misma serie de decisiones en Excel una y otra vez? Revisar una columna, y si el valor es mayor que X, ponerlo en verde; si es menor, en rojo. O quizás categorizar cientos de productos basándote en un código. Estas tareas, aunque sencillas, consumen un tiempo valioso y son propensas a errores humanos. Aquí es donde la verdadera magia de Excel entra en juego: las macros con flujos de control.

Las macros son fantásticas para grabar y reproducir tareas. Sin embargo, su verdadero poder se desata cuando les enseñamos a «pensar» y a tomar decisiones por sí mismas. En lugar de seguir ciegamente una secuencia de pasos, una macro inteligente puede analizar los datos y actuar de manera diferente según las condiciones que encuentre. Esto es posible gracias a los flujos de control, las estructuras del lenguaje de programación VBA (Visual Basic para Aplicaciones) que dirigen el flujo de ejecución de nuestro código. En este artículo, vamos a sumergirnos en cómo puedes utilizar estas estructuras para automatizar decisiones y transformar tus hojas de cálculo en herramientas dinámicas e inteligentes.

¿Qué son los Flujos de Control?

Imagina que estás siguiendo una receta de cocina. La receta no es siempre una lista de pasos del 1 al 10. A menudo, encontrarás instrucciones como: «Si no tienes azúcar moreno, usa azúcar blanco» o «Hornea durante 30 minutos, o hasta que esté dorado». Estas son decisiones, condiciones que alteran el curso de la acción.

En programación, los flujos de control son exactamente eso: son las «recetas» que le damos a nuestra macro para que sepa qué camino tomar. Permiten que el código no se ejecute siempre de forma lineal, de arriba abajo, sino que pueda bifurcarse, tomar desvíos o repetir secciones en función de ciertas condiciones lógicas. Las dos estructuras de decisión más importantes en VBA son If...Then...Else y Select Case.

La Estructura If…Then…Else: El Pilar de la Decisión

La declaración If...Then...Else es la herramienta de toma de decisiones más fundamental y versátil en VBA. Su lógica es muy intuitiva y se traduce directamente del lenguaje humano: «Si se cumple esta condición, entonces haz esto; de lo contrario, haz esto otro».

Sintaxis Básica: If…Then

La forma más simple evalúa una única condición. Si es verdadera, se ejecuta un bloque de código. Si es falsa, no pasa nada y el programa continúa.


    If [condición] Then
        ' Bloque de código a ejecutar si la condición es verdadera
    End If
    

Ejemplo práctico: Imagina que queremos resaltar automáticamente cualquier factura en una lista cuyo importe (en la columna B) supere los 1000 €. Si el valor de la celda activa es mayor que 1000, la pondremos en negrita y color rojo.


    Sub ResaltarImportesAltos()
        ' Comprueba si el valor de la celda activa es mayor que 1000
        If ActiveCell.Value > 1000 Then
            ' Si es verdadero, aplica el formato
            With ActiveCell.Font
                .Bold = True
                .Color = vbRed
            End With
        End If
    End Sub
    

Añadiendo un Plan B: If…Then…Else

¿Qué pasa si queremos hacer algo también cuando la condición no se cumple? Aquí es donde entra en juego Else.


    If [condición] Then
        ' Bloque de código si la condición es VERDADERA
    Else
        ' Bloque de código si la condición es FALSA
    End If
    

Ejemplo práctico: Vamos a crear una macro que revise las notas de un examen en la columna A. Si la nota es 5 o superior, escribirá «Aprobado» en la columna B; de lo contrario, escribirá «Suspenso».

Alumno Nota (Col A) Estado (Col B) – Resultado
Ana 8 Aprobado
Juan 4 Suspenso
María 9 Aprobado

    Sub EvaluarNotas()
        ' Declaramos una variable para recorrer las filas
        Dim i As Long
        ' Bucle para recorrer desde la fila 2 hasta la última con datos en la columna A
        For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
            ' Evaluamos la nota en la columna A de la fila actual
            If Cells(i, 1).Value >= 5 Then
                ' Si es mayor o igual a 5, escribimos "Aprobado"
                Cells(i, 2).Value = "Aprobado"
            Else
                ' Si no, escribimos "Suspenso"
                Cells(i, 2).Value = "Suspenso"
            End If
        Next i
    End Sub
    

Fíjate cómo hemos combinado el flujo de control If con un bucle For para aplicar la lógica a toda una columna, ¡automatización en estado puro!

Múltiples Condiciones: If…Then…ElseIf

Para escenarios más complejos con varias condiciones, podemos anidar varias comprobaciones con ElseIf.


    If [condición1] Then
        ' Código si la condición1 es verdadera
    ElseIf [condición2] Then
        ' Código si la condición2 es verdadera
    Else
        ' Código si ninguna de las anteriores es verdadera
    End If
    

Ejemplo práctico: Mejoremos la macro de notas para asignar una calificación más detallada: «Sobresaliente» (>=9), «Notable» (>=7), «Aprobado» (>=5) y «Suspenso» (<5).


    Sub AsignarCalificacion()
        Dim i As Long
        For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
            If Cells(i, 1).Value >= 9 Then
                Cells(i, 2).Value = "Sobresaliente"
            ElseIf Cells(i, 1).Value >= 7 Then
                Cells(i, 2).Value = "Notable"
            ElseIf Cells(i, 1).Value >= 5 Then
                Cells(i, 2).Value = "Aprobado"
            Else
                Cells(i, 2).Value = "Suspenso"
            End If
        Next i
    End Sub
    

Para más detalles sobre esta estructura, puedes consultar la documentación oficial de Microsoft.

La Estructura Select Case: Ideal para Múltiples Opciones

Cuando necesitas evaluar una única variable o expresión frente a una lista de posibles valores, una larga cadena de If...ElseIf puede volverse difícil de leer. Para estos casos, VBA nos ofrece una alternativa más elegante y ordenada: Select Case.

Esta estructura compara una variable con diferentes «casos» y ejecuta el bloque de código correspondiente al primer caso que coincida.


    Select Case [variable_a_evaluar]
        Case [valor1]
            ' Código a ejecutar si la variable es igual a valor1
        Case [valor2]
            ' Código a ejecutar si la variable es igual a valor2
        Case Is > [valor3]
            ' Código a ejecutar si la variable es mayor que valor3
        Case Else
            ' Código a ejecutar si no coincide con ningún caso anterior
    End Select
    

Ejemplo práctico: Tenemos una lista de productos con un código de departamento en la columna A («ELE», «HOG», «ALI»). Queremos que una macro escriba el nombre completo del departamento en la columna B.

Código (Col A) Departamento (Col B) – Resultado
ELE Electrónica y Tecnología
HOG Hogar y Decoración
JUG Juguetes
XYZ Categoría Desconocida

    Sub CategorizarProductos()
        Dim i As Long
        For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
            ' Evaluamos el valor de la celda en la columna A
            Select Case UCase(Cells(i, 1).Value) 'UCase para ignorar mayúsculas/minúsculas
                Case "ELE"
                    Cells(i, 2).Value = "Electrónica y Tecnología"
                Case "HOG"
                    Cells(i, 2).Value = "Hogar y Decoración"
                Case "ALI"
                    Cells(i, 2).Value = "Alimentación"
                Case "JUG"
                    Cells(i, 2).Value = "Juguetes"
                Case Else
                    Cells(i, 2).Value = "Categoría Desconocida"
            End Select
        Next i
    End Sub
    

Como puedes ver, el resultado es mucho más limpio y fácil de mantener que usar cuatro o cinco If...ElseIf anidados. Es la herramienta perfecta cuando la decisión se basa en el valor específico de una sola celda o variable. Puedes aprender más en la página oficial de Microsoft sobre Select Case.

Conclusión: Tus Macros, Más Inteligentes que Nunca

Dominar los flujos de control como If...Then...Else y Select Case es dar un salto cualitativo en la creación de macros. Pasas de ser un simple «grabador» de acciones a un «programador» que puede infundir lógica y capacidad de decisión en sus automatizaciones. Estas estructuras son los cimientos que te permitirán construir soluciones robustas y flexibles, capaces de adaptarse a diferentes escenarios y datos sin necesidad de intervención manual.

Te animo a que abras el editor de VBA (Alt + F11) y empieces a experimentar. Toma una de tus tareas repetitivas y piensa: ¿Qué decisiones tomo mientras la realizo? Luego, intenta traducir esa lógica a una estructura If o Select Case. Verás cómo tus hojas de cálculo empiezan a trabajar para ti de una forma mucho más inteligente. ¡El límite lo pone tu imaginación!

Ver también...