Lección 12: Condicionales en macros. Comandos IF y CASE en VBA (1).

Escrito por Administrador

14 de septiembre de 2021

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:

If valor1 = valor2 then

'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í.

If valor1 = valor2 then

'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.

If valor1 = valor2 AND valor3 = valor4 then

'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:

If valor1 = valor2 OR valor3 = valor4 then

'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:

If (valor1 = valor2 OR valor3 = valor4) AND valor1 = valor3 then

'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:

If valor1 = valor2 then

'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.

Sub Leccion12_1()

'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.

Sub Leccion12_2()

'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.

Sub Leccion12_3()

'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.

Sub Leccion12_4()

'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.

total-operaciones-matematicas-macros

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”.

total-operaciones-matematicas-macros

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.

total-operaciones-matematicas-macros

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.

total-operaciones-matematicas-macros

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

  1. Avatar

    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

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

« L11. Buscar el inicio y fin de una tabla con macros.

L13. Condicionales en macros (2). »

Categorías

octubre 2024
LMXJVSD
 123456
78910111213
14151617181920
21222324252627
28293031 

Contacto