Condiciones
Objetivos del capítulo
Cuando quiera ejecutar un programa según ciertas condiciones, por ejemplo, para poner un renglón en amarillo si el importe de una columna es mayor que una cantidad determinada, o si quiere saber en qué hoja copiar un valor en función de los elementos situados en otra parte de su libro de trabajo, necesitará utilizar estructuras de condición y, más generalmente, los condicionales VBA. El objetivo de este capítulo es mostrarle las principales sintaxis de estas estructuras, cómo utilizarlas y cuáles elegir en cada situación.
Al final del capítulo, encontrará una serie de ejercicios para practicar.
Estructuras condicionales
Cuando codifica en VBA, usted puede indicarle al programa que realice una prueba y, dependiendo del resultado de esta, que ejecute o no una serie de instrucciones. Esto se denomina estructuras condicionales.
Noción de prueba
Cuando hablamos de una prueba, nos referimos a una igualdad o desigualdad que devuelve un valor booleano (Verdadero/Falso - True/False) que permite determinar el camino que debe seguir el programa en función de ese valor. Existen varias estructuras condicionales; empezaremos por las más sencillas antes de abordar las más elaboradas.
Condición Si Entonces - If Then
La estructura de condición más simple en VBA es la Si Entonces, cuya sintaxis en VBA corresponde a If Then (traducción literal del inglés).
En lenguaje humano, esto equivaldría a:
Si (algo es cierto) entonces
Ejecutamos este código
Fin Si
La sintaxis general de dicha estructura es la siguiente:
If Condicion_Que_Se_Debe_Probar Then
Instrucciones ' se ejecutarán si Condicion_Que_Se_Debe_Probar
devuelve True (Verdadero)
End If
Ejemplo 1: caso de una estructura de condición If Then
La estructura de esta condición consiste en una primera línea que comienza con la palabra clave If, seguida de la condición que se va a probar y la palabra clave Then para terminar esta primera línea. A esto le siguen las instrucciones que se ejecutarán si la condición colocada entre las palabras clave If y Then es verdadera (True). Por último, la estructura termina con las palabras clave End If (Fin Si).
Las instrucciones dentro de la estructura no se ejecutarán si la condición es falsa (False).
He aquí algunos ejemplos:
'El usuario ha proporcionado la edad, si esta es menor de 18 años,
‘se mostrará un mensaje indicando que es menor de edad
If Edad < 18 Then
MsgBox "Su usuario es menor de edad." ...
Condición Si no - Else
En caso de que la condición del If no se cumpla, es decir, devuelva False (falso), es posible ejecutar otras líneas de código.
En lenguaje humano, esto sería equivalente a:
Si (algo es cierto) entonces
Ejecutar el código A
Si no
Ejecutar el código B
Fin Si
La palabra clave que hay que utilizar aquí es Else. Su uso resulta muy sencillo con la siguiente sintaxis:
If Condicion_Que_Se_Debe_Probar Then
InstruccionesA 'se ejecutan si Condicion_Que_Se_Debe_Probar
devuelve True (Verdadero)
Else
InstruccionesB 'se ejecutan si Condicion_Que_Se_Debe_Probar
devuelve False (Falso)
End If
Ejemplo 5: caso de una estructura condicional If Then Else
Por lo tanto, esta palabra clave permite realizar una prueba y, en caso de que esta no cumpla las expectativas, usted puede ejecutar otro código.
Condición Si no Si - ElseIf
A la hora de programar, puede ocurrir que, cuando una primera condición no se cumpla, se quiera probar otra para poder ejecutar otra serie de instrucciones. Esta estructura también existe en VBA.
En lenguaje humano, esto sería equivalente a:
Si (una condición se cumple) Entonces
Se ejecuta el código A
Si no Si (otra condición se cumple) Entonces
Se ejecuta el código B
Si no
Se ejecuta el código C
Fin Si
La palabra clave que permite esta sintaxis es ElseIf (en una palabra). La sintaxis VBA equivalente es la siguiente:
If Condicion_Que_Se_Debe_Probar_1 Then
InstruccionesA 'se ejecutarán si Condicion_Que_Se_Debe_Probar_1
'devuelve True (Verdadero)
ElseIf Condicion_A_Probar_2 Then
InstruccionesB 'se ejecutarán si Condicion_Que_Se_Debe_Probar_1
'devuelve False (Falso) Y que
'Condicion_Que_Se_Debe_Probar_2 devuelve True
(Verdadero)
Else
InstruccionesC...
Condición Selección de casos - Select Case
Cuando quiera colorear una celda en verde, por ejemplo, según tenga las letras A, B, C o D; en azul si tiene un valor entre 1 y 5; en amarillo si tiene un valor superior a 10, o en rojo para todos los demás casos, el uso de la sintaxis con If ElseIf será especialmente engorroso, como puede ver en este ejemplo:
If Range("A1").Value = "A" Then
Range(" A1 ").Interior.Color = vbGreen
ElseIf Range("A1").Value = "B" Then
Range("A1").Interior.Color = vbGreen
ElseIf Range("A1").Value = "C" Then
Range("A1").Interior.Color = vbGreen
ElseIf Range("A1").Value = "D" Then
Range("A1").Interior.Color = vbGreen
ElseIf Range("A1").Value = 1 Then
Range("A1").Interior.Color = vbBlue
ElseIf Range("A1").Value = 2 Then
Range("A1").Interior.Color = vbBlue
ElseIf Range("A1").Value = 3 Then
Range("A1").Interior.Color = vbBlue
ElseIf Range("A1").Value = 4 Then
Range("A1").Interior.Color = vbBlue
ElseIf Range("A1").Value = 5 Then
Range("A1").Interior.Color...
Condición condensada: IIf
Para terminar este capítulo, hay una última estructura de condición que puede utilizar. Se trata de la función IIf(), cuya sintaxis general es la siguiente:
Dim Variable
Variable = Iif(Condición, ValorSiCondicionVerdadera, ValorSiCondicionFalsa)
Ejemplo 14: sintaxis general de la función IIf
Esta función toma tres parámetros en total. El primero corresponde a la condición que se va a probar. El segundo parámetro será el valor de retorno si la condición que se prueba devuelve True; el tercero es el valor devuelto si la condición es falsa.
Puede utilizar esta función cuando quiera asignar un valor a una variable según una condición.
He aquí un ejemplo de la variable Edad de nuestro usuario, y según esta edad, determinamos si el usuario es mayor o menor de edad.
Dim MayorOMenor As String
...
MayorOMenor = Iif(Edad<18, "Menor", "Mayor") & " de edad"
Ejemplo 15: ejemplo de uso de la función IIf
Esta función puede reemplazar una estructura If Then Else vista anteriormente en este capítulo y lograr el mismo objetivo.
Dim Edad As Integer
Dim MayorOMenor As String
...
If Edad<18 Then
MayorOMenor = "Menor"
Else
MayorOMenor = "Mayor"
End If
MayorOMenor...
Ejercicios
Si entonces
Escriba un procedimiento MuestraSiSuperiorA50, de ámbito público, que requiera un parámetro numérico entero llamado Desencadenante.
Este procedimiento deberá mostrar OK si el valor de la variable Desencadenante es estrictamente mayor que 50.
Cree la macro Capitulo08_Ejercicio1.
Esta macro llamará primero a MuestraSiSuperiorA50 pasándole un valor de 40, y luego a MuestraSiSuperiorA50 pasándole un valor de 60.
Ejecute la macro Capitulo08_Ejercicio1.
El mensaje OK deberá aparecer una sola vez.
SI si no
Escriba una función DevuelveDobleOTriple de ámbito privado.
Tomará como entrada un valor entero menor que 255, llamado Entrada, y devolverá un valor posiblemente superior a 255.
Esta función devolverá el doble del valor Entrada si este es superior a 128, o el triple del valor de Entrada en el caso contrario.
Cree la macro Capitulo08_Ejercicio2.
Esta macro mostrará sucesivamente el valor devuelto por DevuelveDobleOTriple, pasándole el valor 10, luego de nuevo el valor que devuelve DevuelveDobleOTriple, pasándole esta vez el valor 200.
Ejecute la macro Capitulo08_Ejercicio2 (resultado: 30 y 400).
Aparecerán los valores 30 y luego 400.
SI si no si
Escriba la función TallaGuantes, de ámbito público, que devuelve una cadena.
Esta función toma como parámetro...