Excel VBA tiene la construcción IF Then Else que puede usar para analizar múltiples condiciones y ejecutar códigos basado en estas condiciones.
Otra construcción similar que le permite verificar múltiples condiciones es la declaración SELECT CASE.
Seleccionar caso es útil cuando tiene tres o más condiciones que desea verificar. También puede usar esto con dos condiciones (pero creo que If Then Else es más fácil de usar en esos casos).
Un ejemplo simple donde la instrucción Select Case es útil cuando desea obtener la calificación de un estudiante en función de las calificaciones que ha obtenido (se tratan como ejemplo más adelante en este tutorial).
Nota: Todos los códigos de ejemplo cubiertos en este tutorial están destinados a colocarse en un módulo en VBA.
Este tutorial cubre:
Sintaxis de caso de selección
A continuación se muestra la sintaxis de caso de selección en Excel VBA:
Select Case Test_ExpressionCase Value_1Code Block when Test_Expression = Value_1Case Value_2Code Block when Test_Expression = Value_2Case Value_3Code Block when Test_Expression = Value_3Case ElseCode Block when none of the case conditions are metEnd Select
- Test_Expression: esta es la expresión cuyo valor analizamos usando diferentes casos (explicado mejor con los ejemplos a continuación).
- Condición_1, Condición_2,…: estas son las condiciones en las que se prueba la expresión de texto. Si cumple con la condición, entonces se ejecuta el bloque de código para la condición dada.
Para cada instrucción Select Case que use, debe usar la instrucción End Select.
Seleccionar ejemplos de casos
Ahora para Para entender mejor cómo usar la instrucción Select Case en VBA, veamos algunos ejemplos.
Tenga en cuenta que la mayoría de los ejemplos en este tutorial están destinados a explicar el concepto. Éstos pueden ser o no la mejor manera de hacer el trabajo.
Comencemos con un ejemplo simple de ver cómo Select Case nos permite verificar las condiciones.
Ejemplo 1 – Verifique los números
En el siguiente ejemplo, el código le pide al usuario que ingrese cualquier número entre 1 y 5, y luego muestra un cuadro de mensaje con el número que ingresó el usuario.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 5")Select Case UserInputCase 1MsgBox "You entered 1"Case 2MsgBox "You entered 2"Case 3MsgBox "You entered 3"Case 4MsgBox "You entered 4"Case 5MsgBox "You entered 5"End SelectEnd Sub
Tenga en cuenta que este código está lejos de ser útil y ni siquiera es infalible. Por ejemplo, si ingresa 6 o cualquier cadena, no haría nada. Pero como mencioné, mi intención aquí es mostrar cómo funciona Seleccionar caso.
Ejemplo 2: Uso de Seleccionar caso con condición IS
Puede usar una condición IS con la construcción Seleccionar caso para comprobar el valor de los números.
El siguiente código comprueba si el número de entrada es mayor que 100 o no.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case Is >= 100MsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
Ejemplo 3 – Uso de mayúsculas y minúsculas para capturar todo
En el ejemplo anterior, utilicé dos condiciones (menor que 100 o mayor o igual a 100).
En lugar del segundo caso con una condición, también puede usar Case Else.
Case Else actúa como un comodín y cualquier cosa que no se encuentre en ninguno de los casos anteriores es tratada por Case Else.
A continuación se muestra un código de ejemplo en el que he usado Case Else:
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case ElseMsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
Ejemplo 4: uso de un rango de números
En Seleccionar Caso, también puede verificar un rango de números.
El siguiente código solicita una entrada y muestra un cuadro de mensaje basado en el valor.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 100")Select Case UserInputCase 1 To 25MsgBox "You entered a number less than 25"Case 26 To 50MsgBox "You entered a number between 26 and 50"Case 51 To 75MsgBox "You entered a number between 51 and 75"Case 75 To 100MsgBox "You entered a number more than 75"End SelectEnd Sub
Ejemplo 5 – Obtener la calificación basada en las calificaciones obtenidas
Hasta ahora hemos visto ejemplos básicos (que no son realmente útiles en el mundo práctico).
Aquí hay un ejemplo que se acerca más a un ejemplo del mundo real en el que puede usar Seleccionar caso en Excel VBA.
El siguiente código le dará la calificación en la que obtiene un estudiante las calificaciones en un examen.
El código anterior pide al usuario las calificaciones y, en base a él, muestra un cuadro de mensaje con la calificación final.
En el código anterior, tengo especificó todas las condiciones, para las marcas 0 – 100.
Otra forma de usar Seleccionar caso es usar un caso más al final. Esto es útil cuando ha tenido en cuenta todas las condiciones y luego especifica qué hacer cuando no se cumple ninguna de ellas.
El código siguiente es una variación del código de calificación con un cambio menor. Al final, tiene una instrucción Case else, que se ejecutará cuando ninguna de las condiciones anteriores sea verdadera.
Ejemplo 6 – Creación de una función personalizada (UDF) usando Seleccionar caso
En el ejemplo anterior, el código le pidió al usuario la entrada de las marcas.
También puede crear una función personalizada (función definida por el usuario) que se puede usar como cualquier función normal de la hoja de trabajo, y que devolverá la calificación de los estudiantes.
A continuación se muestra el código que creará la fórmula personalizada:
Function GetGrade(StudentMarks As Integer)Dim FinalGrade As StringSelect Case StudentMarksCase Is < 33FinalGrade = "F"Case 33 To 50FinalGrade = "E"Case 51 To 60FinalGrade = "D"Case 60 To 70FinalGrade = "C"Case 70 To 90FinalGrade = "B"Case ElseFinalGrade = "A"End SelectGetGrade = FinalGradeEnd Function
Una vez que tenga este código en el módulo, puede utilizar la función GetGrade en la hoja de trabajo como se muestra a continuación.
Ejemplo 7 – Marque IMPAR / PAR con Seleccionar caso
A continuación se muestra un código de ejemplo donde compruebe si el número en la celda A1 es par o impar.
Ejemplo 8 – Comprobación de día laborable / fin de semana (condiciones múltiples)
También puede utilizar Seleccionar caso para comprobar varios valores en el mismo caso.
Por ejemplo, el siguiente código usa la fecha actual para mostrar si hoy es un día laborable o un fin de semana (donde los días del fin de semana son sábado y domingo)
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7MsgBox "Today is a Weekend"Case ElseMsgBox "Today is a Weekday"End SelectEnd Sub
En el código anterior, verificamos dos condiciones (1 y 7) en el mismo caso.
Nota: La función de día de la semana devuelve 1 para el domingo y 7 para el sábado.
Ejemplo 9 – Declaraciones de caso de selección anidadas
También puede anidar una instrucción de caso de selección dentro de otra.
A continuación se muestra un código que verifica si un día es un día de la semana o un fin de semana, y si es fin de semana, se mostrará si es sábado o domingo.
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7 Select Case Weekday(Now) Case 1 MsgBox "Today is Sunday" Case Else MsgBox "Today is Saturday" End SelectCase ElseMsgBox "Today is a Weekday"End SelectEnd Sub
En el código anterior, He anidado el caso de selección para comprobar si el fin de semana es sábado o domingo.
Nota: El ejemplo que se muestra arriba es para explicar el concepto. Esta no es la mejor ni la forma más práctica de averiguar el día de la semana / el fin de semana.
Ejemplo 10 – Verificación de una cadena de texto con Seleccionar mayúsculas y minúsculas
Puede verificar cadenas específicas usando Seleccionar mayúsculas y luego ejecutar código basado en él.
En el código de ejemplo a continuación, le pide al usuario que ingrese el nombre de su departamento y muestra el nombre de la persona con la que debe conectarse para la incorporación.
Sub OnboardConnect()Dim Department As StringDepartment = InputBox("Enter Your Department Name")Select Case DepartmentCase "Marketing"MsgBox "Please connect with Bob Raines for Onboarding"Case "Finance"MsgBox "Please connect with Patricia Cruz for Onboarding"Case "HR"MsgBox "Please connect with Oliver Rand for Onboarding"Case "Admin"MsgBox "Please connect with Helen Hume for Onboarding"Case ElseMsgBox "Please connect with Tony Randall for Onboarding"End SelectEnd Sub
Espero que todos los ejemplos anteriores hayan sido útiles para comprender el concepto y la aplicación de Select Case en Excel VBA.
También le pueden gustar los siguientes tutoriales de VBA:
- Bucles de Excel VBA: para el siguiente, hacer mientras, hacer hasta, para cada uno.
- Para el siguiente bucle en Excel VBA.
- Cómo grabar una macro en Excel.