Declaración de caso de VBA Select

En VBA, el Seleccionar declaración de caso es una alternativa a la Declaración si-entonces, lo que le permite probar si se cumplen las condiciones, ejecutando un código específico para cada condición. La instrucción Select es preferible a la instrucción If cuando hay varias condiciones para procesar.

Seleccionar ejemplo de caso

Este ejemplo solicita al usuario un cuadro de mensaje YesNoCancel y prueba qué opción seleccionó el usuario:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult como VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Seleccionar caso nResultadoCaso vb: SíMsgBox "Sí"Caso vbNoMsgBox "No"Caso vbCancelMsgBox "Cancelar"Finalizar SeleccionarEnd Sub

A continuación, escribimos el equivalente utilizando una declaración If en su lugar. Notará que la declaración de selección de caso implica un poco menos de escritura; este beneficio se amplifica cuando se prueban varios criterios.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult como VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Si nResult = vbYes EntoncesMsgBox "Sí"ElseIf nResult = vbNo EntoncesMsgBox "No"ElseIf nResult = vbCancel ThenMsgBox "Cancelar"Terminara siEnd Sub

Sintaxis de instrucción de caso

La sintaxis de la instrucción Select Case es la siguiente:

12345678910 Seleccionar caso [Expresión de prueba]Caso [condición 1][Acción si la condición 1 es verdadera]Caso [condición 2][Acción si la condición 2 es verdadera]Caso [condición n][Acción si la condición n es verdadera]Caso otro[Acción si ninguna es verdadera]Finalizar Seleccionar

Dónde:

[Expresión de prueba] - Es el valor a evaluar. Por lo general, esta es una variable.

[Acción si la condición n es verdadera] - Es solo el código para ejecutar si se cumple la condición (al igual que con una declaración If)

[Condición n] - Es la condición a probar. Hay muchas formas diferentes de probar las condiciones. Los discutiremos a continuación.

La declaración del caso ejecutará el código para la PRIMERA condición que se encuentre como VERDADERA. Si no se cumple ninguna condición, no se ejecutará ningún código, a menos que se agregue la cláusula Else.

Seleccionar criterios de caso

Los casos seleccionados se pueden utilizar para evaluar tanto valores numéricos como texto. Primero, discutiremos cómo usar casos seleccionados para evaluar expresiones numéricas.

Coincidencia exacta: números

Puede probar fácilmente una coincidencia exacta con una declaración de caso:

1 Caso 10

o agregue comas para probar coincidencias exactas con varios números:

1 Caso 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n como enteron = CInt (InputBox ("…"))Seleccione el caso nCaso 10'Si n es 10 entoncesCaso 20, 30, 40'Si n es 20/30/40 entoncesCaso otro'Si n no es 20/10/30/40, entoncesFinalizar SeleccionarEnd Sub

Rangos

Puede probar si un número cae dentro de un rango como este:

1 Caso 55 a 74

Este procedimiento generará una puntuación en letras para un estudiante en función de su puntuación numérica:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score As IntegerDim LetterGrade como cadenaScore = InputBox ("Introduzca la puntuación del alumno")Seleccionar puntaje de casoCaso 90 a 100LetterGrade = "A"Caso 80 a 90LetterGrade = "B"Caso 70 a 80LetterGrade = "C"Caso 60 a 70LetterGrade = "D"Caso otroLetterGrade = "F"Finalizar SeleccionarMsgBox "La calificación del estudiante es:" & LetterGradeEnd Sub

También puede probar rangos con Case Is

Seleccionar caso es

1234 El caso es <55'Hacer nadaCaso <= 74MsgBox "Dentro del rango"

Recuerde que la declaración del caso solo ejecutará código SOLO para la primera coincidencia.

Este procedimiento calculará la calificación de un estudiante usando el caso es en lugar de caso para.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score As IntegerDim LetterGrade como cadenaScore = InputBox ("Introduzca la puntuación del alumno")Seleccionar puntaje de casoEl caso es> = 90LetterGrade = "A"El caso es> = 80LetterGrade = "B"El caso es> = 70LetterGrade = "C"El caso es> = 60LetterGrade = "D"Caso otroLetterGrade = "F"Finalizar SeleccionarMsgBox "La calificación del estudiante es:" & LetterGradeEnd Sub

Caso otro

Puede agregar "Caso adicional" al final de su Declaración de caso para hacer algo si no se cumplen las condiciones:

1 Caso otro

Consulte el final del ejemplo de código anterior para ver cómo se puede utilizar Case Else.

Seleccionar mayúsculas y minúsculas: texto y el operador Me gusta

Hasta ahora, nuestros ejemplos de casos seleccionados solo han funcionado con números. También puede utilizar sentencias Seleccionar caso con texto.

Coincidencia exacta: texto

Puede probar si la expresión coincide con una frase exacta como esta:

1 Caso "Remolacha"

O use comas para probar si la expresión coincide exactamente con más de una frase:

1 Caso "Apple", "Plátano", "Naranja"

Ponerlo junto se ve así:

12345678910 Sub ExactMatch_Food ()Seleccione Rango de casos ("a1"). ValorCaso "Remolacha"MsgBox "Vegetal"Caso "Apple", "Plátano", "Naranja"MsgBox "Fruta"Finalizar SeleccionarEnd Sub

Mayúsculas y minúsculas

Por defecto, VBA es sensible a mayúsculas y minúsculas. Esto significa que VBA considera "Texto" diferente a "texto". Para desactivar la distinción entre mayúsculas y minúsculas, agregue Option Compare Text en la parte superior de su módulo:

1 Opción Comparar texto

Este ejemplo hará que la selección de mayúsculas y minúsculas no distinga entre mayúsculas y minúsculas cuando se trabaja con texto:

123456789101112 Opción Comparar textoSub ExactMatch_Food ()Seleccione Rango de casos ("a1"). ValorCaso "Remolacha"MsgBox "Vegetal"Caso "Apple", "Plátano", "Naranja"MsgBox "Fruta"Finalizar SeleccionarEnd Sub

Caso como

El operador Like le permite realizar comparaciones inexactas. Si el texto coincide, Like devuelve TRUE, si no coincide, devuelve FALSE. Esto hace que el operador Like sea fácil de usar con las declaraciones If, sin embargo, no funcionará tan fácilmente con las declaraciones de casos.

Caso similar: una prueba fallida

El siguiente código demuestra que el operador Me gusta no funciona con Seleccionar caso:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Dim palabra como cadenapalabra = "CACAO"Seleccionar palabra de casoPalabra de caso 2 Como "* C * C *"MsgBox "Bueno"Caso otroMsgBox "No es bueno"Finalizar SeleccionarEnd Sub

Caso similar: la forma correcta

Sin embargo, podemos agregar la expresión TRUE para que la instrucción Select funcione con el operador Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Dim palabra como cadenapalabra = "CACAO"Seleccionar caso verdaderoPalabra de caso como "* C * C *"MsgBox "Bueno"Caso otroMsgBox "No es bueno"Finalizar SeleccionarEnd Sub

Caso - Colon

Al usar una declaración de caso, puede agregar tantas líneas de código como desee ejecutar con cada condición. Sin embargo, si solo necesita ejecutar una línea de código. Puede usar dos puntos (:) para escribir todo en la misma línea.

Este es el mismo ejemplo de calificación del estudiante que antes, excepto que se usan dos puntos para acortar el código:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score As IntegerDim LetterGrade como cadenaScore = InputBox ("Introduzca la puntuación del alumno")Seleccionar puntaje de casoCaso 90 a 100: LetterGrade = "A"Caso 80 a 90: LetterGrade = "B"Caso 70 a 80: LetterGrade = "C"Caso 60 a 70: LetterGrade = "D"Caso contrario: LetterGrade = "F"Finalizar SeleccionarMsgBox "La calificación del estudiante es:" & LetterGradeEnd Sub

Selección de caso - y / o - múltiples condiciones

Puede utilizar los operadores Y / O para probar criterios adicionales junto con el caso de selección.

En este ejemplo, estamos usando un caso de selección en la variable "edad", pero también queremos probar el sexo. Entonces usamos el operador And para realizar la prueba más compleja:

123456789101112131415161718 Sub NestedSelectCase ()Sexo tenue como una cuerdaDim age As Integersex = "hombre" 'o mujeredad = 15Seleccione la edad del casoEl caso es <20 y el sexo = "masculino"Msgbox "Hombre menor de 20 años"El caso es <20 y el sexo = "mujer"Msgbox "Mujer menor de 20 años"El caso es> = 20 y el sexo = "masculino"Msgbox "Hombre mayor de 20"El caso es> = 20 y el sexo = "mujer"Msgbox "Mujer mayor de 20 años"Finalizar SeleccionarEnd Sub

Declaraciones de casos anidadas

Al igual que las declaraciones If, puede anidar declaraciones de casos entre sí:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Sexo tenue como una cuerdaDim age As Integersex = "hombre" 'o mujeredad = 15Seleccione la edad del casoEl caso es <20Seleccione el sexo del casoCaso "masculino"MsgBox "Hombres menores de 20 años"Caso "mujer"MsgBox "Mujer menor de 20 años"Finalizar SeleccionarEl caso es> = 20 y el sexo = "mujer"Seleccione el sexo del casoCaso "masculino"MsgBox "Hombre mayor de 20"Caso "mujer"MsgBox "Mujer mayor de 20 años"Finalizar SeleccionarFinalizar SeleccionarEnd Sub

Declaración de caso frente a declaración If

Cuantas más condiciones se prueben, más útil será la declaración de caso en comparación con una declaración If. Veamos un ejemplo.

Aquí está el código requerido para probar si el nombre de una hoja de trabajo es igual a un conjunto de valores usando una instrucción If:

12345 Si Nombre = "Presupuesto" O Nombre = "Pronóstico" O Nombre = "Trailing12" O _Nombre = "Flex" O Nombre = "Otras razones" O Nombre = "Comparación" O _Nombre = "BudReview" O Nombre = "P & L_Review" O Nombre = "Otro" Entonces'Hacer algoTerminara si

Aquí está el mismo código que usa una instrucción de selección en su lugar:

12345 Seleccione el nombre del casoCaso "Presupuesto", "Previsión", "Trailing12", "Flex", "OtherRatios", _"Comparación", "BudReview", "P & L_Review", "Otro"'Hacer algoFinalizar Seleccionar

Puede ver que es mucho más fácil usar una declaración de selección en este escenario. Es mucho menos mecanografiado y es mucho más fácil de leer.

Ejemplos de casos seleccionados de VBA

Ej 1. Función definida por el usuario de declaración de caso (UDF)

Repitamos nuestro ejemplo de cálculo de calificaciones anterior y creemos una UDF para calcular la puntuación de un estudiante:

12345678910111213141516 Función GetGrade (puntuación como entero) como cadenaSeleccionar puntaje de casoCaso 90 a 100GetGrade = "A"Caso 80 a 90GetGrade = "B"Caso 70 a 80GetGrade = "C"Caso 60 a 70GetGrade = "D"Caso otroGetGrade = "F"Finalizar SeleccionarFunción final

Ahora podemos usar la función GetGrade en nuestra hoja de cálculo de Excel para calcular rápidamente las calificaciones de los estudiantes:

Ej 2. Nombre de la hoja de prueba / Declaración de caso de bucle

Este código recorrerá todas las hojas de trabajo en un libro de trabajo, Desproteger hojas que cumplan con ciertos criterios:

123456789101112 Sub Case_UnProtectSheet ()Dim ws como hoja de trabajoPara cada ws en hojas de trabajoSeleccione Case ws.Name 'Lista de todas las hojas con ratiosCaso "Presupuesto", "Previsión", "Trailing12", "Flex", "OtherRatios", _"Comparación", "BudReview", "P & L_Review", "Otro"DesprotegerFinalizar SeleccionarSiguiente wsEnd Sub

Ej. 3. Seleccione Caso - Valor de celda

Este ejemplo probará el puntaje de un estudiante en una celda, enviando la calificación en letras directamente a la celda de la derecha.

12345678910111213141516 Sub TestCellValue ()Atenuar celda como rangoEstablecer celda = Rango ("C1")Seleccione la celda de caso.Caso 90 a 100cell.Offset (0, 1) = "A"Caso 80 a 90cell.Offset (0, 1) = "B"Caso 70 a 80cell.Offset (0, 1) = "C"Caso 60 a 80cell.Offset (0, 1) = "D"Finalizar SeleccionarEnd Sub

Ej. 4. Seleccionar caso - Fechas

Este ejemplo de selección de caso es una función que prueba en qué trimestre cae una fecha.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("20/7/2019"))End SubFunción GetQuarter (dt As Date) As IntegerDim sht como hoja de trabajoSeleccionar caso dtCaso C Fecha ("01/01/2019") A CD Fecha ("31/03/2019")GetQuarter = 1Caso C Fecha ("04/01/2019") A CD Fecha ("06/30/2019")GetQuarter = 2Caso C Fecha ("01/07/2019") A Fecha CD ("30/09/2019")GetQuarter = 3Caso C Fecha ("10/01/2019") A CD Fecha ("12/31/2019")GetQuarter = 4Finalizar SeleccionarFunción final

Debido a que es una función, puede usarla como una función dentro de Excel:

Ex. 5 Compruebe si el número es par o impar

Este ejemplo prueba si un número es par o impar.

123456789101112 Sub CheckOddEven ()Dim n como enteron = InputBox ("Ingrese un número")Seleccione Case n Mod 2Caso 0MsgBox "El número es par".Caso 1MsgBox "El número es impar".Finalizar SeleccionarEnd Sub

Ex. 6 Pruebe si la fecha es un día laborable o un fin de semana

Estos ejemplos probarán si una fecha cae en un día laborable o un fin de semana.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt como fechadt = CDate ("1/1/2020")Seleccione el día de la semana del caso (dt)Caso vbMondayMsgBox "Es lunes"Caso vbTuesdayMsgBox "Es martes"Caso vb miércolesMsgBox "Es miércoles"Caso vb JuevesMsgBox "Es jueves"Caso vbViernesMsgBox "Es viernes"Caso vb sábadoMsgBox "Es sábado"Caso vb DomingoMsgBox "Es domingo"Finalizar SeleccionarEnd Sub
123456789101112 Sub CheckWeekend ()Dim dt como fechadt = CDate ("1/1/2020")Seleccione el día de la semana del caso (dt)Caso vbSaturday, vbSundayMsgBox "Es un fin de semana"Caso otroMsgBox "No es fin de semana"Finalizar SeleccionarEnd Sub

VBA Seleccionar caso en Access

Todos los ejemplos anteriores funcionan exactamente igual en Access VBA que en Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs como base de datosDim rst as RecordSetEstablecer dbs = CurrentDBEstablecer rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Con la primera.MoveFirst.EditarSeleccione Case first.Fields ("Ciudad")Caso "Austin".rst.Fields ("TelCode") = "512"Caso "Chicago".rst.Fields ("TelCode") = "312"Caso "New YorK".rst.Fields ("TelCode") = "1212"Caso "San Francisco".rst.Fields ("TelCode") = "415"Finalizar Seleccionar.ActualizarTerminar conFin Sus
wave wave wave wave wave