If Then Else Statement en Excel VBA (explicado con ejemplos)

En Excel VBA, la declaración IF Then Else le permite verificar una condición y realizar una acción en consecuencia.

Esto es extremadamente valioso en muchas situaciones, como veremos en los ejemplos más adelante en este tutorial.

Para darle un ejemplo simple, suponga que tiene una lista de calificaciones en Excel y desea resaltar a todos los estudiantes que obtuvieron una A. Ahora, si le pido que haga esto manualmente, verificará la calificación de cada estudiante y si es una A, la resaltará y, si no es así, la dejará como está.

La misma lógica se puede construir en VBA usando el Si entonces otra cosa declaración también (y, por supuesto, hacer mucho más que resaltar calificaciones).

En este tutorial, le mostraré diferentes formas en que se puede usar la construcción "If Then Else" en Excel VBA, y algunos ejemplos prácticos en acción.

Pero antes de entrar en los detalles, permítame darle la sintaxis de la declaración "IF Then Else".

Si está interesado en aprender VBA de forma sencilla, consulte mi Capacitación en línea de Excel VBA.

Sintaxis - IF Then Else

A continuación se muestra la sintaxis genérica de la construcción If Then Else en VBA

IF condición Entonces true_code [Else false_code]

O

IF condición Entonces true_code Else false_code Fin IF

Tenga en cuenta que la parte Else de esta declaración es opcional.

Ahora, si se pregunta cuál es la diferencia entre las dos sintaxis, permítame aclararlo.

La primera sintaxis es una instrucción IF THEN ELSE simple de una línea en la que no es necesario utilizar la instrucción END IF.

Sin embargo, en la segunda sintaxis, la parte true_code está en la segunda línea. Esto es útil cuando el código que necesita ejecutar en caso de que la condición IF sea verdadera es largo y consta de varias líneas.

Cuando divide la declaración IF en varias líneas, debe decirle a VBA dónde termina la construcción IF Then.

Por lo tanto, debe usar la instrucción End IF.

En caso de que no use End IF cuando sea necesario, VBA le mostrará un error: "Bloquear IF sin END IF"

Ejemplos de uso de la declaración IF Then en VBA

Para darle una idea de cómo funciona la instrucción IF-THEN en VBA, permítanme comenzar con algunos ejemplos básicos (algunos ejemplos prácticos y más útiles se tratan más adelante en este tutorial).

Suponga que tiene el puntaje de un estudiante en la celda A1 y desea verificar si el estudiante aprobó el examen o no (el umbral de calificaciones de aprobación es 35).

Entonces puedes usar el siguiente código:

Sub CheckScore () If Range ("A1"). Valor> = 35 Entonces MsgBox "Pass" End Sub

El código anterior tiene una sola línea de declaración IF que verifica el valor en la celda A1.

Si es más de 35, muestra el mensaje "Aprobado".

Si es menos de 35, no pasa nada.

Pero, ¿qué sucede si desea mostrar un mensaje en ambos casos, ya sea que un estudiante haya aprobado o reprobado el examen?

El siguiente código haría esto:

Sub CheckScore () If Range ("A1"). Valor> = 35 Entonces MsgBox "Pass" Else MsgBox "Fail" End If End Sub

El código anterior usa la instrucción IF y ELSE para ejecutar dos condiciones diferentes. Cuando la puntuación es mayor que (o igual a) 35, la condición IF es verdadera y el código justo debajo se ejecuta (todo antes de la instrucción Else).

Pero cuando la condición IF es FALSE, el código salta a la parte Else y ejecuta el bloque de código en él.

Tenga en cuenta que cuando usamos una sola línea de la instrucción IF Then, no es necesario usar End IF. Pero cuando lo dividimos en más de una línea, necesitamos usar la instrucción End If.

Anidado IF Then (múltiples declaraciones IF Then)

Hasta ahora hemos utilizado una sola instrucción IF Then.

En caso de que tenga varias condiciones para verificar, puede usar:

  • Múltiples condiciones IF
  • Declaración If Then Else
  • IF Then ElseIf Else constructo

Permítame mostrarle en qué se diferencian y cómo usar esto en Excel VBA.

Múltiples declaraciones IF Then

Tomemos el mismo ejemplo de cómo utilizar la puntuación de un alumno.

Si el alumno obtiene una puntuación inferior a 35, el mensaje que se mostrará es "Reprobar", si la puntuación es mayor o igual a 35, el mensaje que se mostrará es "Aprobar".

Podemos usar el siguiente código para hacer esto:

Sub CheckScore () Si Range ("A1"). Valor = 35 Entonces MsgBox "Pass" End Sub

Puede usar múltiples instrucciones IF Then como se muestra arriba. Si bien esto funciona, no es un ejemplo de buena codificación (como verá las alternativas a continuación).

En caso de que decida usar esto, recuerde que estas declaraciones deben ser independientes o mutuamente excluyentes. Lo importante que hay que saber aquí es que en la construcción anterior, se evalúan todas las declaraciones IF y aquellas en las que la condición es verdadera, se ejecuta el código.

Entonces, incluso si la primera declaración IF es correcta, la segunda aún se evaluaría.

Si es entonces otra declaración

Supongamos que esta vez, en lugar de mostrar simplemente el mensaje Pasa / No pasa, tenemos una condición más.

Si el estudiante obtiene una puntuación inferior a 35, el mensaje que se muestra es 'No aprobado', si la puntuación es mayor o igual a 35, el mensaje que se muestra es 'Aprobado', y si la puntuación es superior a 80, el mensaje que se muestra es 'Aprobado, con distinción'.

Podemos usar el siguiente código para hacer esto:

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" Else If Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub

En el código anterior, hemos utilizado varias declaraciones IF (anidadas IF Then) con la ayuda de Else.

Por lo tanto, hay una construcción "SI, entonces otra cosa" dentro de una construcción "SI, entonces otra cosa". Este tipo de anidamiento le permite verificar múltiples condiciones y ejecutar el bloque de código relevante.

If Then ElseIf Else Statement

El código anterior (que vimos en la sección anterior) se puede optimizar aún más utilizando la declaración ElseIf.

Esto es lo que estamos tratando de hacer: si el estudiante obtiene una puntuación inferior a 35, el mensaje que se muestra es 'Reprobar', si la puntuación es mayor o igual a 35, el mensaje que se muestra es 'Aprobado', y si el la puntuación es superior a 80, el mensaje que se mostrará es "Aprobado, con distinción".

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

El código anterior usa ElseIf, que nos permite mantener todas las condiciones dentro de una sola declaración IF Then.

Usando AND y OR en IF Then Else

Hasta ahora en este tutorial, solo hemos verificado una condición a la vez.

Sin embargo, cuando tiene varias condiciones dependientes, puede usar la instrucción AND u OR con las condiciones IF.

A continuación se muestra la sintaxis del uso de la condición AND / OR con la instrucción IF Then.

SI Condición1 Y Condición2 Entonces true_code Else false_code Fin SI

En el código anterior, solo cuando se cumplen Condition1 y Condition2, se ejecuta true_code. Incluso si una de las condiciones es falsa, ejecutará false_code.

Con OR, incluso si una de las condiciones es verdadera, ejecutará true_code. Solo cuando todas las condiciones son falsas, ejecuta false_code.

Ahora veamos cómo funcionan las declaraciones AND y OR con la construcción IF Then Else.

Suponga que tiene las puntuaciones de dos materias en lugar de una y desea comprobar las siguientes condiciones:

  • Fallar - Cuando la puntuación sea inferior a 35 en alguna de las asignaturas.
  • Pasar - Cuando la puntuación sea superior o igual a 35, pero inferior a 80 en ambas asignaturas.
  • Aprobar con distinción - Cuando la puntuación sea superior a 35 en ambas asignaturas y superior o igual a 80 en una o ambas asignaturas.

Aquí está el código que hará esto:

Sub CheckScore () Si Rango ("A1"). Valor <35 O Rango ("B1"). Valor <35 Entonces MsgBox "Falla" ElseIf Rango ("A1"). Valor <80 Y Rango ("B1"). Valor <80 Luego MsgBox "Pasar" Else MsgBox "Pasar, con distinción" Fin si Fin Sub

El código anterior utiliza declaraciones OR y AND.

También puede escribir este mismo código con un ligero cambio (usando OR en lugar de AND).

Sub CheckScore () Si Rango ("A1"). Valor <35 O Rango ("B1"). Valor 80 O Rango ("B1"). Valor> 80 Luego MsgBox "Pasa, con distinción" Else MsgBox "Pasa" Fin Si End Sub

Ambos códigos VBA anteriores le darán el mismo resultado. Personalmente, prefiero el primero, ya que tiene un flujo lógico de verificación de puntajes (pero ese soy solo yo).

Usando No es igual a en If Then

En todos los ejemplos anteriores, hemos utilizado las condiciones que comprueban si un valor es igual a un valor especificado o no.

También puede usar códigos similares al verificar cuando el valor no es igual a un valor especificado en el código VBA. No es igual a lo representado por Excel VBA.

Para ver un ejemplo práctico de uso, eche un vistazo al Ejemplo 1 a continuación.

Usando If Then Else con bucles en VBA

Hasta ahora, hemos estado analizando algunos ejemplos que son buenos para comprender cómo funcionan las declaraciones "SI-ENTONCES" en VBA, sin embargo, no son útiles en el mundo práctico.

Si necesito calificar a los estudiantes, puedo hacerlo fácilmente usando las funciones de Excel.

Así que echemos un vistazo a algunos ejemplos útiles y prácticos que pueden ayudarlo a automatizar algunas cosas y ser más eficiente.

Ejemplo 1: guardar y cerrar todos los libros excepto el libro activo

Si tiene muchos libros abiertos y desea cerrar rápidamente todos, excepto el libro activo, puede usar el siguiente código,

Sub SaveCloseAllWorkbooks () Dim wb As Workbook For each wb In Workbooks On error resume next If wb.Name ActiveWorkbook.Name Entonces wb.Save wb.Close End If Next wb End Sub

El código anterior guardaría y cerraría todos los libros de trabajo (excepto el activo).

Utiliza el ciclo For Next para revisar la colección de todos los libros abiertos y verifica el nombre usando la condición IF.

Si el nombre no es el mismo que el del libro activo, lo guarda y lo cierra.

En caso de que haya un código VBA en alguno de los libros de trabajo y no lo haya guardado como .xls o .xlsm, verá una advertencia (ya que los códigos vba se pierden cuando lo guarda en formato .xlsx).

Ejemplo 2: resaltar celdas con valores negativos

Suponga que tiene una columna llena de números y desea resaltar rápidamente todas las celdas con valores negativos en rojo, puede hacerlo usando el siguiente código.

Sub HighlightNegativeCells () Dim Cll como rango para cada Cll en la selección Si Cll.Value <0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

El código anterior usa el bucle For Each y verifica cada celda en la selección que ha realizado. Si la celda tiene un valor negativo, se resaltará en rojo con un color de fuente blanco.

Ejemplo 3 - Ocultar toda la hoja de trabajo excepto la hoja de trabajo actual

En caso de que desee ocultar rápidamente todas las hojas de trabajo excepto la activa, puede usar el siguiente código:

Sub HideAllExceptActiveSheet () Dim ws As Worksheet For each ws In ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

El código anterior usa el ciclo For Each para recorrer una colección de hojas de trabajo. Comprueba el nombre de cada hoja de trabajo y lo oculta si no es la hoja de trabajo activa.

Ejemplo 4: extraer la parte numérica de una cadena alfanumérica

Si tiene cadenas alfanuméricas en las celdas y desea extraer la parte numérica de ellas, puede hacerlo usando el siguiente código:

Función GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Siguiente i GetNumeric = Función de fin de resultado

Este código creará una función personalizada en Excel que se puede usar dentro de la hoja de trabajo (como una función normal).

¿Dónde poner el código VBA?

¿Se pregunta dónde va el código VBA en su libro de Excel?

Excel tiene un backend de VBA llamado editor VB. Debe copiar y pegar el código en la ventana de código del módulo VB Editor.

Estos son los pasos para hacer esto:

  1. Vaya a la pestaña Desarrollador.
  2. Haga clic en la opción Visual Basic. Esto abrirá el editor de VB en el backend.
  3. En el panel Explorador de proyectos en el Editor de VB, haga clic con el botón derecho en cualquier objeto del libro en el que desea insertar el código. Si no ve el Explorador de proyectos, vaya a la pestaña Ver y haga clic en Explorador de proyectos.
  4. Vaya a Insertar y haga clic en Módulo. Esto insertará un objeto de módulo para su libro de trabajo.
  5. Copie y pegue el código en la ventana del módulo.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave