¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Macros y lenguaje VBA
  3. Condiciones
Extrait - Macros y lenguaje VBA Descubra la programación en Excel (2ª edición)
Extractos del libro
Macros y lenguaje VBA Descubra la programación en Excel (2ª edición) Volver a la página de compra del libro

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...