Condiciones
Objetivos del capítulo
Cuando quiera ejecutar un programa según ciertas condiciones, por ejemplo, para poner una fila en verde 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.
Cuando se utiliza una estructura If Else, solo podrá ejecutarse una de las dos instrucciones InstruccionesA e InstruccionesB, pero no las dos.
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 MuestraSiNegativo, de ámbito público, que requiera un parámetro numérico entero llamado ValorDelDesencadenante.
Este procedimiento deberá mostrar OK si el valor de la variable ValorDelDesencadenante es estrictamente inferior a 0.
Cree la macro Capitulo08_Ejercicio1.
Esta macro llamará primero a MuestraSiNegativo pasándole un valor de 35, y luego a MuestraSiNegativo pasándole un valor de -5.
Ejecute la macro SiEntonces.
El mensaje OK deberá aparecer una sola vez.
SI si no
Escriba una función DevuelveDobleOMitad de ámbito privado.
Tomará como parámetro de entrada un valor entero menor que 255, llamado ValorEntrada, y devolverá un valor posiblemente decimal.
Esta función devolverá el doble del valor ValorEntrada si este es superior a 128, o la mitad del ValorEntrada en el caso contrario.
Cree la macro SiSiNo.
Esta macro mostrará sucesivamente el valor devuelto por DevuelveDobleOMitad, pasándole el valor 15, luego de nuevo por DevuelveDobleOMitad, pasándole esta vez el valor 129.
Ejecute la macro SiSiNo (resultado: 7.5 y 258).
Aparecerán los valores 7.5 y luego 258.
SI si no si
Escriba la función PrecioEnvio, de ámbito público, que devuelve un valor numérico decimal.
Esta función toma como parámetro...