Vamos a ocuparnos ahora de la sentencia que permite ejecutar una o más instrucciones, selectivamente.
Esta sentencia es bastante útil pues puede reemplazar al uso encadenado de If. Por otro lado, su uso nos da cierta elegancia en programación.
Sintaxis:
Select Case NomVar
Case valor1:
........
Case valor2:
........
.................
Case else
...........
End Select
donde NomVar es el nombre de variable que contiene un valor el cual se va a usar para realizar una u otra operación, para seguir después con la siguiente instrucción (la que esté después de End Select).
Ejemplo 1
Abra su libro de macros. Si no lo tiene vaya a la siguiente dirección y descárguelo de allí.
Use [Alt]+F11 para ir al editor. Luego haga clic en el Módulo3 y escriba los procedimientos que aqui daremos, al final de los que allí figuran. Digite los siguientes procedimientos:
Si Ud. digita otro número, se emitirá Error en dato. Si digita espacio en blanco antes o después del número, se eliminarán y se convertirá en valor numérico lo ingresado.
Ejemplo 2
Ahora vamos a extraer el nombre del mes cuyo número se ingrese por treclado. Los nombres de los meses lo vamos a tener almacenados en una cadena de caracteres. Para poder extaer, todos los meses van a tener la misma longitud: 9, por Setiembre. Luego podemos eliminar todos los espacios en blanco. Cuando digite Meses, los nombres de los meses complételos con espacios en blanco hasta 9, exactamente.
Sub LosMeses()
Meses = "Enero Febrero Marzo Abril Mayo Junio Julio Agosto SetiembreOctubre NoviembreDiciembre"
xMes = Val(Trim(InputBox("ingrese el número de mes")))
' Esta fórmula permite seleccionar 9 caracteres desde la posición dada por 9 * (xMes - 1) + 1
xCad = Trim(Mid(Meses, 9 * (xMes - 1) + 1, 9))
Select Case xMes
Case 1, 2, 3:
MsgBox xCad + " : Corresponde al primer trimestre."
Case 4, 5, 6:
MsgBox xCad + " : Corresponde al segundo trimestre."
Case 7, 8, 9:
MsgBox xCad + " : Corresponde al tercer trimestre."
Case 10, 11, 12:
MsgBox xCad + " : Corresponde al cuarto trimestre."
End Select
End Sub
Ejemplo 3
Finalmente codificaremos un procedimiento que lea un primer número, que pida un código de operación (+,-,*,/) y luego un siguiente número para realizar la operación. Para terminar se deberá digitar n ó N.
He aquí el procedimiento:
Sub UsoDeSelect()
' Vamos a leer números para sumar, restar, multiplicar, dividir,
' sacar su raíz cuadrada o tener su cuadrado
' El proceso termina cuando sólo se presiona [Intro] o se hace clic en [Aceptar]
Suma = Val(Trim(InputBox("Ingrese el primer número")))
xKey = Trim(InputBox("Ingrese el código de operación. " + Chr(13) + Chr(13) + "Para terminar, digite, N)"))
While UCase(xKey) <> "N"
Select Case xKey
Case "+": Suma = Suma + Val(InputBox("Ingrese el número"))
Case "-": Suma = Suma - Val(InputBox("Ingrese el número"))
Case "*": Suma = Suma * Val(InputBox("Ingrese el número"))
Case "/": nro = Val(InputBox("Ingrese el número"))
If nro <> 0 Then Suma = Suma / nro
End Select
xKey = Trim(InputBox("Ingrese el código de operación. " + Chr(13) + Chr(13) + "Para terminar, digite, N)"))
Wend
MsgBox "El resultado es: " + Str(Suma)
End Sub
La siguiente imagen muestra parte de estos procedimientos en el módulo 6.
En la siguiente sesión veremos otros ejemplos de uso de la sentencia Select case ... que nos permitirá reemplazar los ifs encadenados para ello
haga clic aquí