La instrucción Select…Case de Visual Basic tiene un funcionamiento similar al Switch…Case de C: nos permite evaluar el valor de una variable y ejecutar un determinado código según su valor, sin tener que acabar recurriendo a un enorme árbol de estructuras if/else anidadas. La variable se evaluará contra una serie de expresiones por orden descendente, parando en cuanto una de las evaluaciones sea verdadera.
Su sintaxis sería la siguiente:
SELECT mivariable
CASE expresión1
'código
CASE expresión2
'otro código
CASE ELSE
'Código por defecto
END SELECT
La variable mivariable del ejemplo sería la que vamos a evaluar. Puede ser una variable de los siguientes tipos: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong, y UShort.
Tanto expresión1, como expresión2 y demás expresiones que queramos usar será valores o conjuntos de valores numéricos o de texto contra los que se evaluará mivariable. Puede responder a tres formas: un valor solo, una comparación con la sintaxis IS seguido de un operador de comparación (mayor, menor, igual, distinto) o un conjunto de valores, que puede mostrarse de dos formas: un grupo de valores separados por comas o un rango del que daremos el valor inicial y el final unidos por un TO.
Finalmente tenemos el CASE ELSE, esto es opcional y es un código que se ejecutará si el valor de mivariable no ha dado true en ninguna de sus evaluaciones.
Veamos una serie de ejemplos. Primero, veamos un código que asigna un valor de color de fondo a un grupo de usuarios:
SELECT Grupo
CASE "Dirección"
colorfondo="verde"
CASE "Producción"
colorfondo="gris"
CASE ELSE
colorfondo="rojo"
END SELECT
Segundo ejemplo, un código que asigna un grupo poblacional según la edad, evaluando por rangos:
SELECT Edad
CASE 0 to 14
grupo="Infantil"
CASE 15 to 20
grupo="juvenil"
CASE 20 to 70
grupo="adulto"
CASE ELSE
grupo="anciano"
END SELECT
Tercer ejemplo, en este caso con grupos de valores por comas. Evaluamos el último número de un código y marcamos si es par o impar (sí, ya se que es más fácil hacerlo con una operación de módulo, pero esto es un simple ejemplo teórico):
SELECT Numero
CASE 1,3,5,7,9
impar=True
CASE ELSE
impar=False
END SELECT
Y vamos a cerrar con el cuarto ejemplo, usando una expresión aritmética para la evaluación, en este caso para los pesos de una competición de lucha:
SELECT Peso
CASE IS < 48
categoria="minimosca"
CASE IS < 51
categoria="mosca"
CASE IS < 54
categoria="gallo"
CASE IS < 57
categoria="pluma"
CASE IS < 60
categoria="ligero"
CASE IS < 64
categoria="superligero"
CASE IS < 69
categoria="wélter"
CASE IS < 75
categoria="mediano"
CASE IS < 81
categoria="semipesado"
CASE IS = 91
categoria="superpesado"
END SELECT