Café y Código

3. Condicionales: If y Select Case

En esta lección aprenderás a:

  • Tomar decisiones con If … Then … Else … End If.
  • Encadenar condiciones con ElseIf.
  • Simplificar comparaciones múltiples con Select Case.
  • Leer el valor de una celda y ejecutar código según su contenido.

If … Then … Else

ClasificarNota.bas
VBA
1 Sub ClasificarNota()
2 Dim nota As Integer
3 nota = Range("B2").Value
4
5 If nota >= 60 Then
6 MsgBox "Aprobado"
7 Else
8 MsgBox "Reprobado"
9 End If
10 End Sub

ElseIf — múltiples condiciones

CalificarNota.bas
VBA
1 Sub CalificarNota()
2 Dim nota As Integer
3 nota = Range("B2").Value
4
5 If nota >= 90 Then
6 Range("C2").Value = "Sobresaliente"
7 ElseIf nota >= 75 Then
8 Range("C2").Value = "Bueno"
9 ElseIf nota >= 60 Then
10 Range("C2").Value = "Aprobado"
11 Else
12 Range("C2").Value = "Reprobado"
13 End If
14 End Sub

Select Case — comparar contra varios valores

MostrarDepartamento.bas
VBA
1 Sub MostrarDepartamento()
2 Dim codigo As String
3 codigo = Range("A2").Value
4
5 Select Case codigo
6 Case "VEN"
7 MsgBox "Ventas"
8 Case "ADM"
9 MsgBox "Administración"
10 Case "TEC"
11 MsgBox "Tecnología"
12 Case Else
13 MsgBox "Departamento desconocido"
14 End Select
15 End Sub

Operadores lógicos: And, Or, Not

Vista tipo Excel: la primera fila muestra las letras de columna; la primera columna muestra los números de fila. En las celdas con fórmula (=...), cada referencia lleva un color distinto. Clic en la referencia: resalta solo esa celda. Clic en el resto de la celda (por ejemplo el = o los operadores): resalta todas las celdas citadas. Repetir el mismo gesto sobre lo ya resaltado lo oculta.

Combinar condiciones en VBAResumen

Los paréntesis ayudan a agrupar condiciones complejas: If (a > 0 And b > 0) Or c = True Then

ABC
1 OperadorSignificadoEjemplo
2AndAmbas condiciones deben ser TrueIf edad >= 18 And pais = "MX" Then
3OrAl menos una condición debe ser TrueIf rol = "Admin" Or rol = "Super" Then
4NotInvierte el resultadoIf Not activo Then
5<>Distinto deIf nombre <> "" Then

Practica en Excel

Abre Excel (o copia los datos con el botón de la tabla), sigue los pasos y comprueba el resultado en tu hoja.

  1. Escribe un valor numérico en B2 y ejecuta CalificarNota() con distintos valores.
  2. Agrega un código de departamento en A2 ("VEN", "ADM", "TEC") y ejecuta MostrarDepartamento().
  3. Añade un Case "MKT" para Marketing en el Select Case.
  4. Crea una Sub que use And para verificar que dos celdas tengan valores mayores que 0.
  5. Prueba IsNumeric() en una condición If para validar que A1 tenga un número antes de procesar.

Ejercicios de práctica

Ejercicio 1 — Par o Impar

Escribe un número en A1. Crea una Sub que lo lea y escriba en B1 "Par" si es divisible por 2 (Mod 2 = 0), o "Impar" en caso contrario.

Ver solución sugerida
ParImpar.bas
VBA
1 Sub ParImpar()
2 Dim n As Long
3 n = Range("A1").Value
4 If n Mod 2 = 0 Then
5 Range("B1").Value = "Par"
6 Else
7 Range("B1").Value = "Impar"
8 End If
9 End Sub

Ejercicio 2 — Temperatura

Lee una temperatura de B1. Escribe en C1: "Calor" si supera 30°C, "Frío" si es menor de 10°C, y "Templado" en cualquier otro caso.

Ver solución sugerida
ClasificarTemp.bas
VBA
1 Sub ClasificarTemp()
2 Dim temp As Double
3 temp = Range("B1").Value
4
5 If temp > 30 Then
6 Range("C1").Value = "Calor"
7 ElseIf temp < 10 Then
8 Range("C1").Value = "Frío"
9 Else
10 Range("C1").Value = "Templado"
11 End If
12 End Sub

Ejercicio 3 — Celda vacía

Crea una Sub que verifique si A1 está vacía (Range("A1").Value = "") y muestre un aviso con MsgBox pidiendo que se complete ese campo.

Ver solución sugerida
ValidarCelda.bas
VBA
1 Sub ValidarCelda()
2 If Range("A1").Value = "" Then
3 MsgBox "La celda A1 no puede estar vacía. Por favor complétala."
4 Else
5 MsgBox "A1 tiene valor: " & Range("A1").Value
6 End If
7 End Sub

Ejercicio 4 — Signo del número

Escribe un número en A1. Crea una Sub que verifique si es positivo, negativo o cero, y escriba el resultado en B1.

Ver solución sugerida
SignoNumero.bas
VBA
1 Sub SignoNumero()
2 Dim n As Double
3 n = Range("A1").Value
4 If n > 0 Then
5 Range("B1").Value = "Positivo"
6 ElseIf n < 0 Then
7 Range("B1").Value = "Negativo"
8 Else
9 Range("B1").Value = "Cero"
10 End If
11 End Sub

Ejercicio 5 — Clasificador por código

Escribe un código de producto en A1. Usa Select Case: "P" → "Perecedero", "D" → "Duradero", "E" → "Electrónico". Cualquier otro → "Sin clasificar". Escribe el resultado en B1.

Ver solución sugerida
ClasificarProducto.bas
VBA
1 Sub ClasificarProducto()
2 Select Case Range("A1").Value
3 Case "P"
4 Range("B1").Value = "Perecedero"
5 Case "D"
6 Range("B1").Value = "Duradero"
7 Case "E"
8 Range("B1").Value = "Electrónico"
9 Case Else
10 Range("B1").Value = "Sin clasificar"
11 End Select
12 End Sub

Ejercicio 6 — Rango de notas con letras ⭐⭐

Escribe una nota (0–100) en A1. Clasifícala con ElseIf: A (90–100), B (80–89), C (70–79), D (60–69), F (menor de 60). Escribe la letra en B1.

Ver solución sugerida
NotaLetra.bas
VBA
1 Sub NotaLetra()
2 Dim nota As Integer
3 nota = CInt(Range("A1").Value)
4
5 If nota >= 90 Then
6 Range("B1").Value = "A"
7 ElseIf nota >= 80 Then
8 Range("B1").Value = "B"
9 ElseIf nota >= 70 Then
10 Range("B1").Value = "C"
11 ElseIf nota >= 60 Then
12 Range("B1").Value = "D"
13 Else
14 Range("B1").Value = "F"
15 End If
16 End Sub

Ejercicio 7 — Comparar A1 y B1 ⭐⭐

Lee los valores de A1 y B1. Escribe en C1: "A1 mayor", "B1 mayor" o "Iguales" según corresponda.

Ver solución sugerida
CompararCeldas.bas
VBA
1 Sub CompararCeldas()
2 Dim a As Double
3 Dim b As Double
4 a = Range("A1").Value
5 b = Range("B1").Value
6
7 If a > b Then
8 Range("C1").Value = "A1 mayor"
9 ElseIf b > a Then
10 Range("C1").Value = "B1 mayor"
11 Else
12 Range("C1").Value = "Iguales"
13 End If
14 End Sub

Ejercicio 8 — Validar con And ⭐⭐

Escribe dos valores en A1 y B1. Crea una Sub que use And para verificar que ambos sean mayores que 0. Si lo son, escribe el producto en C1; si no, muestra un error con MsgBox.

Ver solución sugerida
ValidarYCalcular.bas
VBA
1 Sub ValidarYCalcular()
2 Dim a As Double
3 Dim b As Double
4 a = Range("A1").Value
5 b = Range("B1").Value
6
7 If a > 0 And b > 0 Then
8 Range("C1").Value = a * b
9 Else
10 MsgBox "Ambos valores deben ser mayores que 0."
11 End If
12 End Sub

Ejercicio 9 — Clasificador de edades ⭐⭐

Escribe una edad en A1. Clasifícala: menor de 18 → "Menor de edad", 18–25 → "Joven", 26–60 → "Adulto", mayor de 60 → "Senior". Escribe el resultado en B1.

Ver solución sugerida
ClasificarEdad.bas
VBA
1 Sub ClasificarEdad()
2 Dim edad As Integer
3 edad = CInt(Range("A1").Value)
4
5 If edad < 18 Then
6 Range("B1").Value = "Menor de edad"
7 ElseIf edad <= 25 Then
8 Range("B1").Value = "Joven"
9 ElseIf edad <= 60 Then
10 Range("B1").Value = "Adulto"
11 Else
12 Range("B1").Value = "Senior"
13 End If
14 End Sub

Ejercicio 10 — Select Case con rangos ⭐⭐

Escribe un mes (1–12) en A1. Usa Select Case con rangos (Case 12, 1, 2) para clasificarlo como: "Invierno" (12,1,2), "Primavera" (3,4,5), "Verano" (6,7,8) u "Otoño" (9,10,11).

Ver solución sugerida
Estacion.bas
VBA
1 Sub Estacion()
2 Select Case CInt(Range("A1").Value)
3 Case 12, 1, 2
4 Range("B1").Value = "Invierno"
5 Case 3, 4, 5
6 Range("B1").Value = "Primavera"
7 Case 6, 7, 8
8 Range("B1").Value = "Verano"
9 Case 9, 10, 11
10 Range("B1").Value = "Otoño"
11 Case Else
12 Range("B1").Value = "Mes inválido"
13 End Select
14 End Sub

Ejercicio 11 — IsNumeric como validación ⭐⭐⭐

Escribe texto o número en A1. Crea una Sub que use IsNumeric() para verificar si el contenido es numérico. Si lo es, calcula su raíz cuadrada (Sqr()); si no, muestra un error amigable.

Ver solución sugerida
RaizCuadrada.bas
VBA
1 Sub RaizCuadrada()
2 If IsNumeric(Range("A1").Value) Then
3 Range("B1").Value = Sqr(CDbl(Range("A1").Value))
4 Else
5 MsgBox "A1 no contiene un número válido."
6 End If
7 End Sub

Ejercicio 12 — Clasificar ventas ⭐⭐⭐

Escribe un monto en A1. Crea un clasificador: menor de 1 000 → "Venta baja", 1 000–9 999 → "Venta media", 10 000 o más → "Venta alta". Muéstralo en B1 y además cambia el fondo de B1 al color correspondiente (rojo/amarillo/verde).

Ver solución sugerida
ClasificarVenta.bas
VBA
1 Sub ClasificarVenta()
2 Dim monto As Double
3 monto = Range("A1").Value
4
5 If monto < 1000 Then
6 Range("B1").Value = "Venta baja"
7 Range("B1").Interior.Color = RGB(255, 180, 180)
8 ElseIf monto < 10000 Then
9 Range("B1").Value = "Venta media"
10 Range("B1").Interior.Color = RGB(255, 255, 150)
11 Else
12 Range("B1").Value = "Venta alta"
13 Range("B1").Interior.Color = RGB(180, 255, 180)
14 End If
15 End Sub

Ejercicio 13 — Día de la semana ⭐⭐⭐

Usa Weekday(Now()) para obtener el número del día actual (1=Dom … 7=Sáb). Con Select Case, muestra el nombre del día en español y si es día laboral o fin de semana.

Ver solución sugerida
DiaSemana.bas
VBA
1 Sub DiaSemana()
2 Dim dia As Integer
3 Dim nombre As String
4 Dim tipo As String
5 dia = Weekday(Now())
6
7 Select Case dia
8 Case 1: nombre = "Domingo": tipo = "Fin de semana"
9 Case 2: nombre = "Lunes": tipo = "Día laboral"
10 Case 3: nombre = "Martes": tipo = "Día laboral"
11 Case 4: nombre = "Miércoles": tipo = "Día laboral"
12 Case 5: nombre = "Jueves": tipo = "Día laboral"
13 Case 6: nombre = "Viernes": tipo = "Día laboral"
14 Case 7: nombre = "Sábado": tipo = "Fin de semana"
15 End Select
16
17 MsgBox "Hoy es " & nombre & " — " & tipo
18 End Sub

Ejercicio 14 — Validar rango con And ⭐⭐⭐

Escribe un número en A1. Crea una Sub que verifique que está entre 1 y 100 inclusive usando And. Si está en rango, calcula su porcentaje sobre 100 y escríbelo en B1. Si no, muestra un error.

Ver solución sugerida
ValidarRango.bas
VBA
1 Sub ValidarRango()
2 Dim n As Integer
3 n = CInt(Range("A1").Value)
4
5 If n >= 1 And n <= 100 Then
6 Range("B1").Value = n & "% de 100"
7 Else
8 MsgBox "El valor debe estar entre 1 y 100."
9 End If
10 End Sub

Ejercicio 15 — Semáforo de indicador ⭐⭐⭐

Escribe un porcentaje en A1. Colorea la celda B1: rojo si el porcentaje es menor de 40, amarillo si está entre 40 y 74, verde si es 75 o más. Además escribe el texto "Crítico", "En proceso" o "Logrado" en B1.

Ver solución sugerida
Semaforo.bas
VBA
1 Sub Semaforo()
2 Dim pct As Double
3 pct = Range("A1").Value
4
5 If pct < 40 Then
6 Range("B1").Value = "Crítico"
7 Range("B1").Interior.Color = RGB(255, 100, 100)
8 ElseIf pct < 75 Then
9 Range("B1").Value = "En proceso"
10 Range("B1").Interior.Color = RGB(255, 220, 80)
11 Else
12 Range("B1").Value = "Logrado"
13 Range("B1").Interior.Color = RGB(100, 200, 100)
14 End If
15 End Sub

Pon a prueba tus conocimientos

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.