Probado en: Excel 365 v2509 · Excel 2021 · Excel 2019 · última verificación 05/06/2026
En resumen — Select Case prueba una variable contra muchos valores posibles: más limpio que una pila de ElseIf. Copia y adapta:
Sub CalcularNota()
Dim puntos As Long
puntos = Range("A1").Value
Select Case puntos
Case Is >= 90: Range("B1").Value = "Sobresaliente"
Case 75 To 89: Range("B1").Value = "Notable"
Case 60 To 74: Range("B1").Value = "Aprobado"
Case Else: Range("B1").Value = "Suspenso"
End Select
End Sub
Fíjate en lo legible que es frente a cuatro líneas de ElseIf. Esta guía cubre cada estilo de coincidencia: valores exactos, listas, rangos, comparaciones y la jugada maestra Select Case True.
Por qué Select Case gana a un muro de ElseIf
Cuando pruebas la misma variable contra varios valores, ElseIf se vuelve ruidoso enseguida. Select Case nombra la variable una sola vez, alinea las opciones y se detiene en la primera coincidencia: más legible, más fácil de ampliar y algo más rápido.
Cómo funciona
VBA evalúa la expresión de prueba una vez y luego comprueba cada Case de arriba abajo. La primera coincidencia gana: el resto se omite. Case Else captura todo lo que no coincidió (siempre al final).
Ejemplo 1 — Valores exactos y listas separadas por comas
Un solo Case puede contener varios valores separados por comas:
Sub ClasificarPais()
Dim pais As String
pais = Range("A2").Value
Select Case pais
Case "Francia", "Alemania", "Italia", "España"
Range("B2").Value = "Europa"
Case "Japón", "Corea", "China"
Range("B2").Value = "Asia"
Case Else
Range("B2").Value = "Otro"
End Select
End Sub
Ejemplo 2 — Rangos numéricos con To
To abarca un rango inclusivo: perfecto para niveles y tramos:
Select Case totalPedido
Case 0 To 99.99: descuento = 0
Case 100 To 499.99: descuento = 0.05
Case 500 To 999.99: descuento = 0.1
Case Else: descuento = 0.15
End Select
Ejemplo 3 — Is con operadores de comparación
Cuando un rango no basta, Is permite usar >, <, >=, <=, <>:
Select Case temperatura
Case Is < 0: estado = "Helada"
Case Is <= 15: estado = "Frío"
Case Is <= 25: estado = "Templado"
Case Else: estado = "Caluroso"
End Select
El orden importa: como la primera coincidencia gana, lista tus casos desde el límite más restrictivo hacia arriba.
Ejemplo 4 — Mezclar listas, rangos e Is en un solo bloque
Select Case puntuacion
Case 0, 1, 2: valoracion = "Pobre" ' una lista
Case 3 To 6: valoracion = "Media" ' un rango
Case Is >= 7: valoracion = "Buena" ' una comparación
Case Else: valoracion = "Sin valorar"
End Select
Los tres estilos de coincidencia conviven libremente. Esa flexibilidad es la razón por la que Select Case escala donde las cadenas de ElseIf se vuelven ilegibles.
Ejemplo 5 — El truco Select Case True
¿Necesitas probar condiciones sobre variables distintas pero quieres conservar la disposición limpia de los Case? Pon la expresión de prueba en True:
Select Case True
Case edad < 18 And tieneTutor: tarifa = "Infantil"
Case edad >= 65: tarifa = "Senior"
Case esEstudiante And edad < 26: tarifa = "Estudiante"
Case Else: tarifa = "Adulto"
End Select
Ahora cada Case es una expresión booleana completa. Es la forma idiomática en VBA de mantener legible la lógica de varias variables: el único punto en que Select Case va más allá de una sola variable.
Ejemplo 6 — Case Else como red de seguridad
Incluye siempre Case Else, aunque solo sea para atrapar sorpresas:
Select Case Weekday(Date)
Case vbMonday To vbFriday: MsgBox "Día laborable"
Case vbSaturday, vbSunday: MsgBox "Fin de semana"
Case Else: MsgBox "Valor de fecha inesperado" ' nunca debería ocurrir
End Select
Un Case Else que «nunca debería ejecutarse» es la forma de atrapar los datos imprevistos en lugar de no hacer nada en silencio.
Select Case frente a If/ElseIf — cuál usar
| Situación | Usar |
|---|---|
| Probar una variable contra 3 o más valores | Select Case |
| Rangos de valores (1–10, 11–20…) | Select Case ... To |
| Condiciones sobre variables distintas | If...ElseIf o Select Case True |
| Solo una o dos salidas | If...Else |
Regla práctica: misma variable, muchas salidas → Select Case. Variables distintas, pocas salidas → If.
Errores comunes (y su solución)
Dos casos se solapan y se dispara el incorrecto — Recuerda: la primera coincidencia gana. Case Is < 100 antes de Case Is < 50 hace que los valores menores de 50 nunca lleguen al segundo caso. Ordena de lo más específico a lo más general.
Case x > 5 no hace nada — Una comparación sin más no se permite; escribe Case Is > 5. La palabra clave Is es obligatoria al comparar.
La coincidencia de texto falla por las mayúsculas — Select Case distingue mayúsculas por defecto. Añade Option Compare Text al inicio del módulo o normaliza con Select Case LCase(pais).
Deja de mantener la lógica de ramificación a mano
Select Case es más limpio que ElseIf, pero sigue siendo código que debes probar, depurar y actualizar cada vez que cambian las reglas de negocio. ExcelMaster Agent convierte la regla misma en la interfaz —«clasifica la columna A: menos de 100 = sin descuento, 100–499 = 5 %, 500+ = 10 %»— y genera la lógica, rangos y casos límite incluidos. Pruébalo gratis →
Guías relacionadas
- VBA If Then Else — 6 ejemplos prácticos
- Bucle For en VBA — 8 ejemplos prácticos
- Bucle While en VBA — While, Do While y Do Until explicados
Preguntas frecuentes
¿Puede VBA Select Case probar un rango de valores?
Sí — Case 1 To 10 coincide con cualquier valor de 1 a 10 inclusive. Puedes combinar rangos, listas y comparaciones Is en el mismo bloque.
¿Cómo pruebo varios valores en un mismo caso?
Sepáralos con comas: Case "A", "B", "C" coincide con cualquiera de los tres. Los rangos y comparaciones también pueden unirse a la lista: Case 1, 2, 5 To 9.
¿Cuándo debo usar Select Case en lugar de If?
Cuando pruebas la misma variable contra tres o más valores. Para una o dos salidas, o condiciones sobre variables distintas, If...ElseIf es suficiente.
¿Es VBA Select Case más rápido que ElseIf? Marginalmente, porque la expresión de prueba se evalúa una sola vez. La verdadera ventaja es la legibilidad y el mantenimiento, no la velocidad bruta.
