Excel.Macros:If..Then…Else…EndIf

Hay ocasiones en que es necesario ejecutar un conjunto de instruciones u otro, en función de una determinada condición . Cuando aparece esa problemática, podemos utilizar la instrucción If. La sintáxis a utilizar es la siguiente:

if condicion then
bloque a ejecutar si se cumple la condicion
End If

Esta estructura, nos permite ejecutar un conjunto de instrucciones, únicamente cuando se cumple la condición especificada

    valor = Range("A1").Value
    If valor > 10 Then
        valor = valor * 20
        MsgBox "El valor de A1*20 es " & valor
        Range("A1").Value = valor
    End If

este código recoge el valor que haya en la celda A1 de la hoja activa, si ese valor es mayor de 10, lo multiplica por 20, presenta un mensaje diciéndolo, y deja el nuevo valor en la misma casilla

Esta instrucción puede prolongarse para incorporar un bloque de instrucciones que se ejecutaría en caso de que no se cumpliera la condición; para ello, utilizaríamos la palabra Else, con la siguiente estructura:

if condicion then
      bloque a ejecutar si se cumple la condicion
Else
      bloque a ejecutar si NO se cumple la condicion
End If

como véis, se trata de incluir la palabra Else, y a continuación el código que queremos ejecutar cuando la condición no se haya cumplido.

Vamos a añadir a la rutina anterior el que nos presente un mensaje cuando el valor de A1 sea menor de 10; para ello, añadiríamos:

Else
       MsgBox "Valor demasiado pequeño"

la rutina quedaría de la siguiente manera:

    valor = Range("A1").Value
    If valor > 10 Then
        valor = valor * 20
        MsgBox "El valor de A1*20 es " & valor
        Range("A1").Value = valor
    Else
        MsgBox "Valor demasiado pequeño
    End If

El problema se puede complicar  si necesitamos comparar otros valores, el ejemplo podría ser un sistema de valoración de nota que debe escribir Sobresaliente, Notable, Aprobado o suspenso, en función que la nota sea mayor de 9, entre 7 y 9, entre 5 y 7 o menor de 5 respectivamente.

Vamos a ver como lo resolveríamos con if

    salida = ""
    valor = Range("A1").Value
    If valor > 9 Then
        salida = "Sobresaliente"
    Else
        If valor > 7 Then
            salida = "Notable"
        Else
            If valor >= 5 Then
                salida = "Aprobado"
            Else
                salida = "suspenso"
            End If
        End If
    End If
    Range("B1").Value = salida

Como veis, lo que hemos hecho, ha sido poner un if en la parte Else del if anterior; ésto significa que cuando se consiga una condición cierta, se dejará de pasar por el resto de if, ya que cada Else, agrupa a todos los que están debajo de él.

Si la nota es mayor que 9, se cumple la primera condición, por lo que la parte Else de ese if, que son todos los demás, no se llega a ejecutar. En caso de que la nota no fuera mayor de 9, entonces iríamos a la parte Else, en donde se comprobaría si la nota es mayor que 7, si es mayor, asignara “Notable”, y ya se desprecia la parte Else que contiene el resto de comprobaciones, y asi sucesivamente; al final hemos dejado el resultado en una variable llamada salida que es la que movemos a B1 para mostrar en la hoja

Aquí tenemos otra macro que espera en A1 un código de dos letras (EU, AS, AF, AM, y O) y devuelve en B1 el nombre del continente.

    nombre = "???"
    valor = Range("A1").Value

    If valor = "EU" Then
        nombre = "Europa"
    ElseIf valor = "AS" Then
        nombre = "Asia"
    ElseIf valor = "AF" Then
        nombre = "Africa"
    ElseIf valor = "AM" Then
        nombre = "America"
    ElseIf valor = "O" Then
        nombre = "Oceania"
    Else
        MsgBox "El codigo de continente es desconocido"
    End If
    Range("B1") = nombre

En este caso, hemos utilizado la palabra ElseIF que cierra el if anterior,y simplifica un poco la codificación, mantenemos la cadena de if, y solo tenemos un Else al final, que se ejecutará cuando no se haya cumplido ninguno de los if precedentes.

En el siguiente tema, trataremos otra estructura de control (Select..Case) mucho mas optimizada para la toma de decisiones múltiples del estilo que hemos visto en estos ejemplos.

Hasta entonces, propongo que mejoremos un poco esta ultima codificación, para que podamos aceptar los códigos de continente en mayúsculas o minúsculas

Realmente, es muy sencillo; en VBA disponemos de las instrucciones Ucase y Lcase que se dedican a convertir un texto a mayúsculas o a minúsculas respectivamente, con lo que la modificación que tendremos que hacer, es añadir despues de la linea que nos carga valor que es:

valor = Range(“A1”).Value

añadir una linea que convierta la captura a mayúsculas, y lo hacemos con

valor = UCase(valor)

Ahora ya, independientemente de lo que hayan introducido, valor estará en mayúsculas, por lo que lo podemos comparar con nuestra lista

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Excel, Formacion y etiquetada , , . Guarda el enlace permanente.

Una respuesta a Excel.Macros:If..Then…Else…EndIf

  1. Hector dijo:

    Hola Miguel, me parace muy buena la explicación! muchas gracias.

    Estoy atorado con algo, mediante un boton quiero hacer un bucle que se vaya acumulando hasta que alcance un valor y ahi termine. Ejem

    Objetivo: llegar a 10
    Ejecución boton bucle 1: se genera un valor aleatorio 5 celda A1 y se pone en celba B1.
    Ejecución boton bucle 2: se genera un valor aleatorio 2 celda A1 y en la celda B1 ya a aperece el resultado = 7
    Ejecución boton bucle 3: se genera un valor aleatorio 3 celda A1 y en la celda B1 ya a aperece el resultado = 10
    Terminar

    Muchas gracias.

    saludos

Deja un comentario