En esta lección, vas a aprender a utilizar los comandos IF y CASE en VBA.
Hasta hoy hemos aprendido los comandos básicos para realizar funciones concretas: asignar valores a variables y a celdas, operaciones matemáticas, copiar y pegar celdas, cambiar su formato, agregar y eliminar filas y columnas, ordenar datos…y más.
Pero, para automatizar operaciones, necesitamos un desencadenante, alguien que nos diga cuándo las ejecutamos. Para esto nace el comando IF en VBA, un amigo inseparable que nos acompañará en el 90% de nuestras macros e irá decidiendo cuándo lanzar un comando u otro. ¡Lo vemos!
La sintaxis es la siguiente:
'Acciones a realizar si valor1 es igual a valor2
Else
'Acciones a realizar si valor1 es distinto de valor2
End if
Es decir, si el valor1 (que puede ser una celda o una variable) es igual al valor2 (que puede ser una celda, una variable, un número o un texto) entonces realiza las acciones descritas. En caso contrario (else) realiza estas otras acciones.
Si no vamos a realizar acciones en caso de que no se cumpla la condición, podemos eliminar el comando else, y quedaría así.
'Acciones a realizar si valor1 es igual a valor2
End if
Los condicionales tienen principio y final: siempre una sentencia IF en VBA termina con un END IF.
Se pueden añadir varias condiciones en una sola sentencia IF en VBA.
Con AND obligamos a que se cumplan todas las condiciones.
'Acciones a realizar si valor1 es igual a valor2 y además valor3 es igual a valor4
Else
'Acciones a realizar en caso contrario
End if
Sin embargo, con OR, con que se cumpla una de ellas es suficiente:
'Acciones a realizar si valor1 es igual a valor2 o valor3 es igual a valor4
Else
'Acciones a realizar en caso contrario
End if
También, se pueden combinar como se muestra a continuación:
'Acciones a realizar si valor1 es igual a valor2 o valor3 es igual a valor4 y además valor 1 es igual a valor3
Else
'Acciones a realizar en caso contrario
End if
Además, si queremos encadenar varios condicionales, lo podemos hacer usando ELSEIF:
'Acciones a realizar si valor1 es igual a valor2
Elseif valor1 = valor3 then
'Acciones a realizar si valor1 es igual a valor3
Elseif valor1 = valor4 then
'Acciones a realizar si valor1 es igual a valor4
Else
'Acciones a realizar si valor1 es distinto de valor2, valor 3 y valor 4
End if
También podríamos usar el comando CASE:
Select Case valor1
'Acciones a realizar si valor1 es igual a valor1
Case valor2
'Acciones a realizar si valor1 es igual a valor2
Case valor3
'Acciones a realizar si valor1 es igual a valor3
Case valor4
'Acciones a realizar si valor1 es igual a valor4
Case Else
'Acciones a realizar si valor1 es distinto de valor2, valor 3 y valor 4
End Select
Después de marearte con la teoría, vamos a ver unos ejemplos prácticos en los que usaremos los comandos IF y CASE en VBA. Crearemos una hoja en la que introduciremos la nota de un alumno y automáticamente se rellenará la calificación de la misma.
En primer lugar, crea un libro nuevo, abre el editor VBA, inserta 6 módulos y copia en ellos las siguientes macros.
Macro 1. Usar condicionales IF.
'Macro que rellena automáticamente el campo de calificación en función de la nota. Método IF – elseif
'Si el valor de la celda C2 es menor que 5 entonces
If Cells(2, "C").Value < 5 Then
'Colocamos la palabra "SUSPENSO" en la celda D2
Cells(2, "D").Value = "SUSPENSO"
'Si el valor de la celda C2 es igual o mayor que 9 entonces
ElseIf Cells(2, "C").Value >= 9 Then
'Colocamos la palabra "SOBRESALIENTE" en la celda D2
Cells(2, "D").Value = "SOBRESALIENTE"
'En caso contrario, es decir, la celda C2 es mayor o igual que 5 y menor que 9 entonces
Else
'Colocamos la palabra "APROBADO" en la celda D2
Cells(2, "D").Value = "APROBADO"
End If
End Sub
Macro 2. Usar condicionales SELECT CASE.
'Macro que rellena automáticamente el campo de calificación en función de la nota. Método Select Case
'Seleccionamos la celda C2 y vemos si cumple las siguientes condiciones
Select Case Cells(2, "C").Value
'Si el valor de la celda C2 es menor que 5 entonces
Case Is < 5
'Colocamos la palabra "SUSPENSO" en la celda D2
Cells(2, "D").Value = "SUSPENSO"
'Si el valor de la celda C2 es igual o mayor que 9 entonces
Case Is >= 9
'Colocamos la palabra "SOBRESALIENTE" en la celda D2
Cells(2, "D").Value = "SOBRESALIENTE"
'En caso contrario, es decir, la celda C2 es mayor o igual que 5 y menor que 9 entonces
Case Else
'Colocamos la palabra "APROBADO" en la celda D2
Cells(2, "D").Value = "APROBADO"
End Select
End Sub
Macro 3. Usar IF y SELECT CASE conjuntamente.
'Macro que colorea de rojo el nombre y apellido si está suspenso además de actualizar el valor de calificación tal y como haciamos en la Macro Leccion12_2
'Copiamos Macro Leccion12_2
Select Case Cells(2, "C").Value 'Seleccionamos la celda C2 y vemos si cumple las siguientes condiciones
Case Is < 5 'Si el valor de la celda C2 es menor que 5 entonces
Cells(2, "D").Value = "SUSPENSO" 'Colocamos la palabra "SUSPENSO" en la celda D2
Case Is >= 9 'Si el valor de la celda C2 es igual o mayor que 9 entonces
Cells(2, "D").Value = "SOBRESALIENTE" 'Colocamos la palabra "SOBRESALIENTE" en la celda D2
Case Else 'En caso contrario, es decir, la celda C2 es mayor o igual que 5 y menor que 9 entonces
Cells(2, "D").Value = "APROBADO" 'Colocamos la palabra "APROBADO" en la celda D2
End Select
'Parte nueva que colorea de rojo el nombre y apellido si está suspenso
If Cells(2, "C").Value < 5 Then 'Si el valor de la celda D2 es menor que 5 entonces
Cells(2, "A").Font.ColorIndex = 3 'Coloreamos de rojo el nombre
Cells(2, "B").Font.ColorIndex = 3 'Coloreamos de rojo el apellido
Else 'En caso contrario
Cells(2, "A").Font.ColorIndex = 1 'Coloreamos de negro el nombre
Cells(2, "B").Font.ColorIndex = 1 'Coloreamos de negro el apellido
End If
End Sub
Macro 4. Restablecer el formato de la hoja.
'Macro que restablece el formato de la hoja
'Coloreamos de negro el nombre
Cells(2, "A").Font.ColorIndex = 1
'Coloreamos de negro el apellido
Cells(2, "B").Font.ColorIndex = 1
'Borramos el contenido de las celdas C2 y D2
Range("C2:D2").ClearContents
End Sub
Crea ahora cuatro botones, asóciales las macros anteriores y rellena la hoja como aparece en la figura.
A continuación, te dejo dos enlaces donde explico cómo configurar Microsoft Excel para el uso de macros y cómo asignar macros a botones, por si te interesan.
Rellena el campo “Nota global” con la nota que desees. En el ejemplo, suponemos que el alumno ha sacado un 6,5. Al ejecutar la primera de las macros, verás como el campo “Calificación” se rellena automáticamente con el valor “APROBADO”.
Cambia ahora el valor de la nota, coloca un 9 en su lugar. Ejecuta la segunda macro. Aparecerá en el campo “Calificación” el valor “SOBRESALIENTE”. Esta segunda macro hace la misma función que la primera (de hecho si ejecutamos la primera obtenemos el mismo resultado) pero el código es distinto. En la primera macro utilizamos If-elseif y en la segunda usamos Select Case. En tus macros usa el método con el que te encuentres más cómodo.
La tercera macro, además de hacer lo mismo que la macro 1 y 2, es decir, rellenar el campo “Calificación” automáticamente en función de la nota, va a marcar en rojo el nombre y apellido del alumno que haya suspendido.
Por último, coloca en el campo “Nota global” el valor 3, y ejecuta la macro.
En próximas lecciones aprenderemos como hacer esto para un listado extenso de alumnos de forma automática, solo te pido un poco de paciencia porque antes hay que conocer bien los condicionales.
La cuarta macro restablece la hoja de cálculo para que puedas probar cuantas veces quieras.
Con esto llegamos al final de la duodécima lección, en la que has aprendido a utilizar los comandos IF y CASE en VBA.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
2 Comentarios
Enviar un comentario
« L11. Buscar el inicio y fin de una tabla con macros.
L13. Condicionales en macros (2). »
Buenas noches
Tengo una macro de una competencia, cuando agrego el # del competidor me agrega ciertos datos, incluyendo la categoría.
Lo que no he logrado, es crear una macro que vaya asignando un contador que varíe según la categoría.
Por ejemplo, yo soy competidora de la categoría A, en esa categoría ya han ingresado 3 personas más. Cuando yo ingrese, debería asignarme el #4.
Gracias
Hola Nancy!
Lo primero que tienes que hacer es sacar una lista única de las categorías existentes. Mira este post: https://www.vbatotal.com/leccion-17-eliminar-duplicados-en-excel-comando-advancedfilter-unique/
Una vez tengas identificadas las categorías, tendrás que recorrer el listado para cada una de ellas con una variables contador que sumará una unidad en cada iteración y escribirá el valor en la columna ID.
Si tienes cualquier duda, abre un hilo en el foro, sube tu archivo y te echo una mano.
Saludos.