Estructuras de decisión Select Case anidados

Me ha parecido interesante la explicación y el ejemplo de las estructuras anidadas de Select Case y la reproduzco aquí al objeto de que vd pueda ver la potencialidad de esta estructura con un ejemplo que, a pesar de la presencia de varias condiciones, resulta bastante clara y así además, aborda ejemplos más desarrollados.

Publicado por ExcelForo

El problema planteado es el siguiente:

…en una base de datos de personas, el objetivo es que Excel diga la clasificacion del porcentaje de grasa de una persona, el cual se obtiene por un numero que da una balanza.
El problema es que son muchas condicionales!
Si es mujer de 18-39 años: 0-21 bajo en grasa;22-33 normal;34-39 alto en grasa;más de 39 obesidad.
Si es mujer de 40-59 años:0-23 bajo en grasa;24-34 normal;35-40 alto en grasa; más de 40 obesidad.
Si es mujer de 60-69 años: 0-24 bajo en grasa;25-36 normal;37-42 alto en grasa; más de 42 obesidad.
Si es hombre de 18-39 años: 0-8 bajo en grasa;9-20 normal;21-25 alto en grasa;más de 25 obesidad
Si es hombre de 40-59 años: 0-11 bajo en grasa;12-22 normal;23-28 alto en grasa;màs de 28 obesidad
Si es hombre de 60-99 años: 0-13 bajo en grasa;13-25 saludable;26-30 alto en grasa; más de 30 obesidad.

Si bien podríamos optar por desarrollar la fórmula anidando repetidamente la función SI condicional, es cierto que sólo lo podríamos implementar con versiones superiores a Excel 2003, ya que en esta o anteriores nuesto máximo de anidaciones era de siete…

Recordemos que para crear una funcíon personalizada o UDF debemos acceder al Editor de VBA presionando Alt+F11, y ya dentro del Editor insertar un modulo (Menú Insertar > Modulo), haciendo doble clic en el módulo copiaremos el siguiente código:

‘creamos una función con tres variables – Sexo, Edad y % grasa
Public Function Grasa1(sexo, edad, Porcgra)
Select Case sexo
‘definimos categorías para mujeres
Case Is = «M»
Select Case edad
Case 18 To 39
Select Case Porcgra
Case 0 To 21: Grasa1 = «bajo en grasa»
Case 22 To 33: Grasa1 = «normal en grasa»
Case 34 To 39: Grasa1 = «alto en grasa»
Case Is > 39: Grasa1 = «obesidad»
End Select
Case 40 To 59
Select Case Porcgra
Case 0 To 23: Grasa1 = «bajo en grasa»
Case 24 To 34: Grasa1 = «normal en grasa»
Case 35 To 40: Grasa1 = «alto en grasa»
Case Is > 40: Grasa1 = «obesidad»
End Select
Case 60 To 99
Select Case Porcgra
Case 0 To 24: Grasa1 = «bajo en grasa»
Case 25 To 36: Grasa1 = «normal en grasa»
Case 37 To 42: Grasa1 = «alto en grasa»
Case Is > 42: Grasa1 = «obesidad»
End Select
End Select
‘lo mismo para hombres
Case Is = «H»
Select Case edad
Case 18 To 39
Select Case Porcgra
Case 0 To 8: Grasa1 = «bajo en grasa»
Case 9 To 20: Grasa1 = «normal en grasa»
Case 21 To 25: Grasa1 = «alto en grasa»
Case Is > 25: Grasa1 = «obesidad»
End Select
Case 40 To 59
Select Case Porcgra
Case 0 To 11: Grasa1 = «bajo en grasa»
Case 12 To 22: Grasa1 = «normal en grasa»
Case 23 To 28: Grasa1 = «alto en grasa»
Case Is > 28: Grasa1 = «obesidad»
End Select
Case 60 To 99
Select Case Porcgra
Case 0 To 13: Grasa1 = «bajo en grasa»
Case 14 To 25: Grasa1 = «normal en grasa»
Case 26 To 30: Grasa1 = «alto en grasa»
Case Is > 30: Grasa1 = «obesidad»
End Select
End Select
End Select
End Function

Ya podremos utilizar nuestra función Grasa1 en nuestra Hoja de cálculo, sobre tres celdas
=GRASA1(sexo; edad; %grasa)

Estructuras de decisión Select Case

Cuando tenemos que verificar muchas condiciones la estructura if…else puede ser un tanto pesada. Con Select…Case podemos conseguir una estructura más clara y legible. Su sintáxis es la siguiente:

Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] End Select

Ejemplo:

Sub usuarios()
Dim usuario As String
usuario = InputBox(«Ingrese su nombre»)

Select Case usuario
Case «Hugo»
MsgBox «Bienvenido Hugo»
Case «Luis»
MsgBox «Bienvenido Luis»
Case Else
MsgBox «Lo siento no estás registrado»
End Select

End Sub