Curso Excel VBA y Macros – Cap. 22 – Instrucción Select…Case para múltiples condiciones

<<CURSO COMPLETO EN YOUTUBE>>

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

<<CURSO COMPLETO EN YOUTUBE>>

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.

También te podría gustar...