Diseño de macros en Excel
Estructuras de control en VBA
En esta lección hablaremos de las instrucciones If y Select Case en VBA. Estas estructuras de control permiten evaluar una determinada condición y realizar una serie de acciones dependiendo del resultado de la evaluación. Por tanto, nos permiten tomar decisiones y ejecutar ciertas instrucciones sólo en los casos que nos interese.
Instrucción If… then en VBA
Las instrucciones If … then en VBA permiten comprobar una determinada condición y realizar una serie de acciones dependiendo de si el resultado de la evaluación es Verdadero (True) o Falso (False).
La sintaxis de esta estructura será la siguiente:
If condicion = True Then
instrucciones
End If
Se evalúa una condición y, en caso de que sea verdadera, se realizan una serie de instrucciones.
Esta es una estructura que también utilizamos en el lenguaje hablado. Por ejemplo: Si llueve, coge el paraguas.
Veamos un ejemplo aplicado a una macro de Excel:
If ActiveCell.Value = 0 Then
MsgBox "El valor de la celda es 0"
End If
Este código muestra un mensaje en pantalla en el caso de que el valor la celda activa sea 0.
Si solo se tiene que ejecutar una instrucción, como en el caso anterior, podríamos seguir esta estructura:
If condicion = True Then instruccion
If ActiveCell.Value = 0 Then MsgBox "El valor de la celda es 0"
También se puede dar el caso de que tengamos que ejecutar una serie de instrucciones si la condición es verdadera y otras si se evalúa como falsa. Seguiríamos esta sintaxis en VBA:
If condicion = True Then
instrucciones
Else
instrucciones
End If
Veamos un ejemplo de la vida real para este tipo de estructura:
No hace falta mucha explicación, ¿verdad? Si hace frio entonces sofá, manta y peli. Si no hace frio salimos a pasear. Es decir, una serie de acciones si se cumple la condición y otras acciones diferentes si no se cumple.
Apliquemos esta estructura a un ejemplo en una macro de Excel:
If ActiveCell.Value >= 0 Then
MsgBox "Es un número positivo"
Else
MsgBox "Es un número negativo"
End If
Este código muestra un mensaje en pantalla en el caso de que el valor la celda activa sea mayor o igual a cero y un mensaje distinto en caso contrario.
Evaluar otra condición: Elseif
Podemos agregar instrucciones ElseIf a la instrucción If…Then…Else para evaluar otras condiciones si la primera condición es falsa. La sintaxis de la estructura sería:
If condicion1 = True Then
instrucciones
ElseIf condicion2 = True Then
instrucciones
ElseIf condicion3 = True Then
instrucciones
...
End If
Veamos un ejemplo de código en una macro de Excel:
nota = ActiveCell.Value
If nota >= 9 Then
MsgBox "SOBRESALIENTE"
ElseIf nota >= 7 Then
MsgBox "NOTABLE"
ElseIf nota >= 6 Then
MsgBox "BIEN"
ElseIf nota >= 5 Then
MsgBox "APROBADO"
Else
MsgBox "SUSPENDIDO"
End If
Estas instrucciones evalúan la nota de un alumno que se ha introducido en la celda activa. Dependiendo del valor aparecerá un mensaje en pantalla que nos indicará si la nota corresponde a un Sobresaliente, notable, bien, aprobado o suspendido.
Desde este enlace puedes acceder a la Explicación del equipo Microsoft sobre esta estructura de control.
Utilizar los operadores lógicos en las instrucciones If y Select Case en VBA
Los operadores lógicos nos permiten evaluar más de una condición en una misma instrucción if…then. Los operadores más utilizados son AND y OR.
- El operador AND unirá las condiciones con un Y lógico, es decir, se deberán cumplir todas las condiciones para que el resultado final sea verdadero.
- El operador OR unirá las condiciones con un O lógico, es decir, si se cumple una o más de las condiciones el resultado final sea verdadero.
Veamos un ejemplo practico en VBA para Excel. Tenemos estos datos en nuestra hoja de Excel:
Usamos este código uniendo las condiciones examen >=5 y practicas>=5 con un Y lógico:
examen = Range("B1").Value
practicas = Range("B2").Value
If examen >= 5 And practicas >= 5 Then
MsgBox "APROBADO"
Else
MsgBox "SUSPENDIDO"
End If
De esta forma, el alumno debe haber obtenido una nota mayor o igual que 5 en el examen Y en las prácticas para aprobar. En el ejemplo que se veía en la imagen el alumno habría suspendido.
Usamos el mismo código uniendo las condiciones con un O lógico:
examen = Range("B1").Value
practicas = Range("B2").Value
If examen >= 5 Or practicas >= 5 Then
MsgBox "APROBADO"
Else
MsgBox "SUSPENDIDO"
End If
En este caso el alumno estará aprobado si ha obtenido una nota mayor o igual que 5 en el examen O en las prácticas. En el ejemplo que se veía en la imagen el alumno habría aprobado.
Instrucción Select Case en VBA
Las instrucciones Select Case en VBA permiten evaluar una determinada expresión y ejecutar una serie de instrucciones dependiendo del valor de la expresión. Tienen la siguiente sintaxis:
Select Case Expresion
Case opcion1
instrucciones
Case opcion2
instrucciones
Case opcion3
instrucciones
...
Case Else 'si no se cumplen casos anteriores
instrucciones
End Select
Valores admitidos para los distintos casos:
- Un único valor. Por ejemplo, Case 2
- Una lista de valores. Por ejemplo, Case 2,5,7
- Un rango de valores. Por ejemplo, Case 2 To 5
- Una condición. Por ejemplo, Case is >5
Ejemplo para evaluar una nota escrita en la celda activa:
nota = ActiveCell.Value
Select Case nota
Case 10
MsgBox "MATRÍCULA DE HONOR"
Case 9 To 10
MsgBox "SOBRESALIENTE"
Case Is >= 7
MsgBox "NOTABLE"
Case Is >= 6
MsgBox "BIEN"
Case Is >= 5
MsgBox "APROBADO"
Case 0 To 3
MsgBox "MUY DEFICIENTE"
Case Else
MsgBox "SUSPENDIDO"
End Select