- Seleccionar ejemplo de caso
- Sintaxis de instrucción de caso
- Seleccionar criterios de caso
- Seleccionar mayúsculas y minúsculas: texto y el operador Me gusta
- Caso - Colon
- Selección de caso - y / o - múltiples condiciones
- Declaraciones de casos anidadas
- Declaración de caso frente a declaración If
- Ejemplos de casos seleccionados de VBA
- VBA Seleccionar caso en Access
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 |