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
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.
4 comentarios
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
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