INTRODUCCION:
La estructura de decisión If-Then-Else puede anidarse y como este anidamiento se puede repetir tantas veces como el problema lo exija, a veces el código suele hacerse confuso y frecuentemente da lugar a errores, en estos casos se puede recurrir a la estructura de decisión Select-Case.
En primer lugar veremos que funciona igual que If-Then-Else, para lo que utilizaremos el mismo ejemplo que If-Then-Else en la parte en que comparábamos 2 números ubicados en las celdas D1 y E1 y el programa debía responder si estos son iguales, mayores o menores, ubicando la respuesta en la celda D4
El código es
escencialmente este código evalúa el valor actual de la celda "D1" y se escribe un código diferente de acuerdo al caso de que este valor sea = , > o < que el valor actual de la celda "E1"
CODIGO PARA COPIAR Y PEGAR
Sub SelectCase()
A1 = Range("E1").Value
Select Case Range("D1").Value
Case Is = A1
ActiveSheet.Range("D4").Value = "Los Valores de D1 y E1 son iguales"
Case Is > A1
ActiveSheet.Range("D4").Value = "D1 es mayor que E1"
Case Is < A1
ActiveSheet.Range("D4").Value = "E1 es mayor que D1"
End Select
End Sub
La utilidad esencial de esta estructura se manifiesta cuando los casos que se evalúan son mas numerosos como veremos en el siguiente ejemplo.
Introducir en una celda la nota de un alumno y en otra una leyenda que diga si esta aplazado, aprobado y en caso de estar aprobado si su nota fue buena, muy buena, distinguida o sobresaliente, teniendo en cuenta que:
Aplazado= 1,2,3
Aprobado= 4,5
Bueno= 6,7
Muy bueno= 8
Distinguido= 9
Sobresaliente= 10
se puede responder a estas preguntas aplicando este código
CODIGO PARA COPIAR Y PEGAR
Sub SelectCase()
a = Range("A2").Value
Select Case a
Case 1 To 3
ActiveSheet.Range("B2").Value = "APLAZADO"
Range("E1").Select
Case 4 To 5
ActiveSheet.Range("B2").Value = "APROBADO"
Range("E1").Select
Case 6 To 7
ActiveSheet.Range("B2").Value = "BUENO"
Range("E1").Select
Case 8
ActiveSheet.Range("B2").Value = "MUY BUENO"
Range("E1").Select
Case 9
ActiveSheet.Range("B2").Value = "DISTINGUIDO"
Range("E1").Select
Case 10
ActiveSheet.Range("B2").Value = "SOBRESALIENTE"
Range("E1").Select
End Select
End Sub
El resultado final queda como se ve en la figura, en este caso hemos agregado un botón para disparar la macro, el cual esta señalado por la flecha roja