Probado en: Excel 365 v2509 · Excel 2021 · Excel 2019 · última verificación 05/06/2026
En resumen — Select Case toma un valor y lo encamina a un resultado. 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
Pero el fragmento no es lo importante. La mayoría de las guías te lanzan diez variantes y te dejan adivinar cuándo Select Case es la elección correcta. Aquí el modelo mental va primero, para que puedas razonar sobre casos que nadie te mostró.
La idea central: Select Case es una centralita, no una lista de comprobación
If...ElseIf es una lista de comprobación. Hace una secuencia de preguntas sí/no independientes —¿es esto? no… ¿es aquello? no…— y cada pregunta puede consultar una variable distinta.
Select Case es una centralita. Toma un valor, recorre las salidas y conecta con la primera que encaja. Cada Case es un destino posible para la misma entrada.
Esa única distinción te lo dice todo:
- Misma variable, muchos resultados → centralita.
Select Case. - Variables distintas, preguntas realmente independientes → lista de comprobación.
If...ElseIf.
Si alguna vez escribes ElseIf puntos = 1 … ElseIf puntos = 2 … ElseIf puntos = 3, has construido una centralita con piezas de lista de comprobación. Esa es la señal para cambiar.
La regla que explica todos los errores: la primera coincidencia gana
VBA evalúa tu valor una vez y luego prueba cada Case de arriba abajo, y se detiene en la primera coincidencia. Interioriza esa regla y el error clásico deja de ser un misterio:
' ERROR: nada por debajo de 100 llega nunca a la segunda línea
Select Case puntos
Case Is < 100: nota = "revisar"
Case Is < 50: nota = "crítico" ' ← código muerto
End Select
Case Is < 100 ya se traga todo lo que está por debajo de 50, así que la salida «crítico» nunca se alcanza. El arreglo no es una palabra clave nueva, es el orden. El caso más estrecho primero:
Select Case puntos
Case Is < 50: nota = "crítico"
Case Is < 100: nota = "revisar"
End Select
Casi toda pregunta de «mi Select Case hace lo contrario» es esta regla mordiendo. El concepto es la guía de depuración.
Cómo conmuta la centralita — cuatro formas de salida
Los estilos de coincidencia se aprenden una vez. Cada uno es una forma distinta de salida; todos conviven en el mismo bloque.
Valores exactos y listas — una salida, varias etiquetas:
Select Case pais
Case "Francia", "Alemania", "Italia": region = "Europa"
Case "Japón", "Corea", "China": region = "Asia"
Case Else: region = "Otro"
End Select
Rangos con To — el caballo de batalla para niveles y tramos:
Select Case totalPedido
Case 0 To 99.99: descuento = 0
Case 100 To 499.99: descuento = 0.05
Case Else: descuento = 0.1
End Select
Is con comparación — cuando un rango no basta (>, <, >=, <=, <>). Is es obligatorio; un Case puntos > 5 a secas no compila.
Mézclalos libremente en un bloque — esa flexibilidad es justo por lo que Select Case escala donde las cadenas de ElseIf se pudren:
Select Case puntos
Case 0, 1, 2: valoracion = "Pobre" ' una lista
Case 3 To 6: valoracion = "Media" ' un rango
Case Is >= 7: valoracion = "Buena" ' una comparación
End Select
La salida de emergencia: Select Case True
Este es el movimiento que separa a quien conoce Select Case de quien solo lo usa. Cuando tus condiciones abarcan variables distintas, lo normal sería volver a los If anidados. No lo hagas. Pon la expresión de prueba en True y cada Case se convierte en un booleano completo:
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
Es la forma idiomática, en VBA, de mantener plana y legible la lógica de varias variables: el único punto en que la centralita va más allá de una sola variable. Recúrrela antes que a una pirámide de If.
Cuándo NO usar Select Case
Una opinión honesta, porque la mayoría de las guías la evitan:
- ¿Dos resultados? Usa
If...Else. UnSelect Casecon un soloCasey unCase Elsees puro ceremonial. - ¿Una condición por rama, todas sobre variables distintas? Eso es una lista de comprobación —
If...ElseIfse lee mejor, salvo que quieras deliberadamente la disposiciónSelect Case True. - ¿Tres o más resultados sobre la misma variable? Siempre
Select Case. Si aún escribesElseIfaquí, le complicas la vida al próximo lector (a menudo tú mismo dentro de seis meses).
La velocidad es una nota a pie de página —la expresión de prueba se evalúa una sola vez— pero elige Select Case por la legibilidad, no por microsegundos.
Errores comunes — todos consecuencia del modelo
- Se dispara el caso equivocado / rama muerta. Otra vez la primera coincidencia. Ordena de lo más estrecho a lo más amplio.
Case puntos > 5no compila. Una comparación a secas es ilegal; escribeCase Is > 5.- La coincidencia de texto falla por mayúsculas.
Select Casedistingue mayúsculas por defecto. AñadeOption Compare Textal inicio del módulo o normaliza conSelect Case LCase(pais).
A partir de cierto punto, la lógica de ramificación no debería escribirse a mano
Select Case es la herramienta correcta para encaminar un valor, pero en cuanto las reglas mismas cambian sin parar (nuevos niveles, nuevos tramos, nuevos casos límite), pruebas y vuelves a probar código en cada cambio. ExcelMaster Agent te permite enunciar la regla en vez de programarla —«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 — cuando la lista de comprobación es la forma correcta
- Bucle For en VBA — 8 ejemplos prácticos
- Bucle While en VBA — While, Do While y Do Until explicados
Preguntas frecuentes
¿Cuándo debo usar Select Case en lugar de If?
Cuando encaminas una variable hacia tres o más resultados. Para dos resultados, o condiciones sobre variables distintas, If...ElseIf se lee mejor, salvo que uses deliberadamente el patrón Select Case True.
¿Puede Select Case probar un rango de valores?
Sí — Case 1 To 10 coincide con cualquier valor de 1 a 10 inclusive, y puedes mezclar rangos, listas y comparaciones Is en el mismo bloque.
¿Por qué mi Select Case ejecuta la rama equivocada? La primera coincidencia gana. Un caso amplio colocado antes de uno estrecho se traga a este último — reordena de lo más estrecho a lo más amplio.
¿Es Select Case más rápido que ElseIf? Marginalmente, porque el valor se evalúa una sola vez. La ventaja real es la legibilidad, no la velocidad.
