Curso Excel VBA y Macros – Cap. 22 – Instrucción Select…Case para múltiples condiciones
En anteriores videos vimos que usando la instrucción If-Then-Else podemos evaluar condiciones y tomar decisiones. Cuando teníamos varias condiciones, usábamos Elseif para evaluarlas.
En este tutorial veremos una manera alternativa y muy útil para evaluar varias condiciones, incluso de una manera más elegante. Hablamos de la instrucción Select Case, la cual no servirá para ejecutar instrucciones dependiendo el valor de una expresión.
Ver video Capítulo 22 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Select Case
Esta instrucción es una excelente alternativa a la instrucción IF, la cual vimos en video anteriores. Select case nos ayudará a evaluar una expresión, y dependiendo de su valor, podemos ejecutar instrucciones o macros.
Con Select-Case podemos evaluar:
- Rangos de valores usando la palabra clave To.
- Hacer comparaciones usando la palabra clave Is.
Sintaxis de la instrucción Select…Case
Aunque la sintaxis realmente es muy simple, es recomendable usarla cuando tenemos 3 o más caminos diferentes que tomar, es decir, condiciones.
Select Case testexpression
[Case expressionlist-n][statements-n]
[Case Else [elsestatements]
End Select
Donde:
Parte | Descripción |
testexpression | Cualquier expresión que podemos evaluar, puede ser numérica o cadena de texto. |
expressionlist-n | Aquí definimos los valores que evaluarán a la expresión. |
1. Evaluamos si la expresión es igual a un valor: Case valor | |
2. Comparamos la expresión con un valor: Case Is < 10 | |
3. Comparamos si la expresión entra en un rango de valores: Case 0 To 9 | |
statements-n | Instrucciones que se ejecutarán si la testexpression coincide con alguna de las expressionlist-n. |
elsestatements | Intrucciones que se ejecutarán en caso de una ninguna de las expressionlist-n coincida con la testpression. |
Macros de ejemplo usando Select Case
Convertir texto a mayúsculas y minúsculas. En esta macro vamos a usar la función InputBox para mostrar un cuadro de diálogo que nos pregunte sobre si queremos convertir el texto de una celda en MAYÚSCULAS o minúsculas. Usaremos Select Case para evaluar la respuesta que se guarde del InputBox para ejecutar las macros correspondientes dependiendo el valor ingresado.
Usaremos la asignación de variables a objetos y las funciones Ucase para mayúsculas y LCase para minúsculas.
Sub Convertir_texto() Dim Opcion As Variant Dim Texto As String Dim Rango As Range Set Rango = ThisWorkbook.Sheets("Hoja1").Range("A3") Texto = "Elige una opción:" & vbNewLine & _ vbNewLine & "1. MAYÚSCULAS" & _ vbNewLine & "2. minúsculas" Opcion = InputBox(Texto, "EXCELeINFO", 1) Select Case Opcion Case 1 Rango.Value = VBA.UCase(Rango.Value) Case 2 Rango.Value = VBA.LCase(Rango.Value) Case Else MsgBox "Debes elegir una opción válida", vbExclamation, "EXCELeINFO" End Select End Sub
Definir descuento en base a una cantidad. Esta macro ya la habíamos hecho usando IF, ahora la haremos con Select Case. Usaremos If Not para indicar que, si el valor de la celda C12 no es número, entonces salga de la macro.
Nota que usamos la palabra Is para hacer una comparación. Evaluaremos el valor de la celda A12, que es la cantidad vendida. Usando Select Case le indicaremos que si el valor son:
- Menor que 10, entonces 0%.
- Entre 10 y 19, entonces 10%.
- 20 o mayor, entonces 20%.
Sub Rango_Numeros() Dim Numero As Variant Dim Comisión As Double Numero = Sheets(2).Range("A12") If Not VBA.IsNumeric(Numero) Then Range("C12").Value = "": Exit Sub Select Case Numero Case Is < 10 Comisión = 0 Case Is <= 19 Comisión = 0.1 Case Else Comisión = 0.2 End Select Sheets(2).Range("C12").Value = Comisión End Sub
La siguiente macro es la misma que la anterior, solo que usaremos To para definir los rangos de los valores que se evaluarán.
Sub Rango_Numeros2() Dim Numero As Variant Dim Comisión As Double Numero = Sheets(2).Range("A12") If Not VBA.IsNumeric(Numero) Then Range("C12").Value = "": Exit Sub Select Case Numero Case 0 To 9 Comisión = 0 Case 10 To 19 Comisión = 0.1 Case Else Comisión = 0.2 End Select Sheets(2).Range("C12").Value = Comisión End Sub
Mostrar si día actual es fin de semana. Esta macro es muy sencilla, pero sirve para demostrar la sintaxis básica de la instrucción Select Case. Evaluaremos el número del día actual; si el número es 1 o 7, entonces se muestra el mensaje indicando que es fin de semana, de lo contrario, se muestra otro mensaje diciendo que no es fin de semana.
Noten que usamos la función Weekday para sacar el número del día actual, el cual lo obtenemos con la función Now.
Sub Dia() Select Case Weekday(Now) Case 1, 7 MsgBox "Fin de semana" Case Else MsgBox "No es fin de semana" End Select End Sub
Descarga el archivo de ejemplo
022 – Instrucción Select…Case – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.