🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Select Case en Excel — 6 ejemplos (rangos, Is, varios valores)

|

VBA Select Case en Excel — 6 ejemplos (rangos, Is, varios valores)

Probado en: Excel 365 v2509 · Excel 2021 · Excel 2019 · última verificación 05/06/2026

En resumenSelect 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úsculasSelect 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

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.