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
1Sub 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
10End Sub

ElseIf — múltiples condiciones

CalificarNota.bas
VBA
1Sub 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
14End Sub

Select Case — comparar contra varios valores

MostrarDepartamento.bas
VBA
1Sub 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
15End 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
1OperadorSignificadoEjemplo
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
1Sub 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
9End 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
1Sub 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
12End 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
1Sub 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
7End 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
1Sub 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
11End 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
1Sub 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
12End 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
1Sub 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
16End 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
1Sub 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
14End 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
1Sub 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
12End 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
1Sub 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
14End 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
1Sub 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
14End 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
1Sub 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
7End 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
1Sub 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
15End 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
1Sub 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
18End 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
1Sub 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
10End 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
1Sub 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
15End Sub

Pon a prueba tus conocimientos

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