VBA If, ElseIf, Else (Guía definitiva de las sentencias If)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on febrero 5, 2023

Sentencia If

Sentencia If en bucle for

If – Then

Las sentencias If de VBA le permiten probar si las expresiones son Verdadero o Falso, ejecutando un código diferente basado en los resultados.
Veamos un ejemplo sencillo:

Sub si()
  If Range("a2").Value > 0 Then Range("b2").Value = "Positivo"
End Sub

Se comprueba si el valor del rango A2 es mayor que 0. Si es así, se establece el rango B2 igual a «Positivo»

Sentencia If guion

Nota: Al probar las condiciones utilizaremos los operadores de comparación =, >, <, <>, <=, >=. Los discutiremos con más detalle más adelante en el artículo.
Esta es la sintaxis para una simple sentencia If de una línea:

If [expresión_de_prueba] then [acción]

Para facilitar la lectura, puede utilizar un carácter de continuación de línea (guión bajo) para ampliar las sentencias If a dos líneas (como hicimos en la imagen anterior):

If [expresión_de_prueba] then _
    [acción]
If Range("a2").Value > 0 then _
   Range("b2").Value = "Positivo"

End If

La declaración «single-line» if anterior funciona bien cuando está probando una condición. Pero a medida que sus declaraciones IF se complican con múltiples condiciones, necesitará añadir un «End If» al final de la declaración if:

Sub si()
  If Range("a2").Value > 0 Then
    Range("b2").Value = "Positivo"
  End If
End Sub

Sentencia If then endif

Aquí la sintaxis es

If [expresión_de_prueba] Then
  [acción]
End If

El End If significa el final de la sentencia If.
Ahora vamos a añadir un ElseIf:

ElseIf – Condiciones múltiples

El ElseIf se añade a una sentencia If existente. ElseIf comprueba si una condición se cumple SÓLO si las condiciones anteriores no se han cumplido.

En el ejemplo anterior probamos si el valor de una celda es positivo. Ahora también probaremos si el valor de la celda es negativo con un ElseIf:

Sub If_ElseIf()
  If Range("A2").Value > 0 Then
    Range("B2").Value = "Positivo"
  ElseIf Range("A2").Value < 0 Then
    Range("B2").Value = "Negativo"
  End If
End Sub

Sentencia If elseif

Puede usar múltiples ElseIfs para probar múltiples condiciones:

Sub If_MultiplesCondiciones()
    If Range("a2").Value = "Gato" Then
        Range("b2").Value = "Miau"
    ElseIf Range("a2").Value = "Perro" Then
        Range("b2").Value = "Guau"
    ElseIf Range("a2").Value = "Pato" Then
        Range("b2").Value = "Cuack"
    End If
End Sub

Sentencia If multiples condiciones

Ahora añadiremos un Else:

Else

El Else se ejecutará si no se cumplen otras condiciones anteriores. Terminaremos nuestro ejemplo utilizando un Else para indicar que si el valor de la celda no es positivo o negativo, entonces debe ser cero:

Sub else_()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "Positivo"
    ElseIf Range("a2").Value < 0 Then
        Range("b2").Value = "Negativo"
    Else
        Range("b2").Value = "Cero"
    End If
End Sub

Sentencia else

If-Else

El tipo más común de sentencia If es un simple If-Else:

Sub If_Else()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "Positvo"
    Else
        Range("b2").Value = "No Negativo"
    End If
End Sub

 

Sentencia if else

IFs anidados

También puede «anidar» las sentencias if unas dentro de otras.

Sub Ifs_Anidados()
    If Range("a2").Value > 0 Then
        Range("b2").Value = "Positivo"
    Else
        If Range("a2").Value < 0 Then
            Range("b2").Value = "Negativo"
        Else
            Range("b2").Value = "Cero"
        End If
    End If
End Sub

Sentencias if anidadas

IF – Or, And, Xor, Not

A continuación hablaremos de los operadores lógicos: Or, And, Xor, Not.

If – Or

El operador Or comprueba si se cumple al menos una condición. El siguiente código probará si el valor en el Rango A2 es menor a 5,000 o mayor a 10,000:

Sub If_Or()
    If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Then
        Range("b2").Value = "Fuera de rango"
    End If
End Sub

Sentencia If Or

Puede incluir varios Ors en una línea:

Sub If_Varios_Or()
    If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Or Range("a2").Value = 9999 Then
        Range("b2").Value = "Fuera de rango"
    End If
End Sub

Si va a utilizar varios Ors, se recomienda utilizar un carácter de continuación de línea para que su código sea más fácil de leer:

Sub If_Varios_Or()
    If Range("a2").Value < 5000 Or _
        Range("a2").Value > 10000 Or _
        Range("a2").Value = 9999 Then
        Range("b2").Value = "Fuera de Rango"
    End If
End Sub

Sentencia If Or Varios Or

If And

El operador And permite comprobar si se cumplen TODAS las condiciones.

Sub If_And()
    If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
        Range("b2").Value = "En Rango"
    End If
End Sub

Sentencia If And

If Xor

El operador Xor permite comprobar si se cumple exactamente una condición. Si se cumplen cero condiciones, Xor devolverá FALSE, Si se cumplen dos o más condiciones, Xor también devolverá false. Rara vez he visto el uso de Xor en la programación VBA.

If Not

El operador Not se utiliza para convertir FALSE en TRUE o TRUE en FALSE:

Sub IF_Not()
    MsgBox Not (True)
End Sub

Sentencia If Not

Observe que el operador Not requiere paréntesis alrededor de la expresión a cambiar. El operador Not también puede aplicarse a las sentencias If:

Sub if_not_ii()
    If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
        Range("b2").Value = "Fuera de Rango"
    End If
End Sub

Sentencia If Not 2do

Comparaciones If

Cuando se realizan comparaciones, normalmente se utiliza uno de los operadores de comparación:

Operador de Comparación Explicación
= Igual a
<> No es igual a
> Mayor que
>= Mayor o igual que
< Menos que
<= Menor o igual que

Sin embargo, también puede utilizar cualquier expresión o función que dé como resultado TRUE o FALSE

If – Función booleana

Cuando construya expresiones para sentencias If, también puede utilizar cualquier función que genere TRUE o FALSE. VBA tiene algunas de estas funciones:

Función Descripción
IsDate Devuelve TRUE si la expresión es una fecha válida
IsEmpty Comprueba si hay celdas en blanco o variables no definidas
IsError Comprueba si hay valores de error
IsNull Comprueba si hay un valor NULL
IsNumeric Comprueba si el valor es numérico

Pueden ser llamadas así:

If IsEmpty(Range("A1").Value) Then MsgBox "Celda Vacía"

Excel también tiene muchas funciones adicionales que pueden ser llamadas usando WorksheetFunction. Aquí hay un ejemplo de la función IsText de Excel

:

If Application.WorksheetFunction.IsText(Range("a2").Value) Then _
   MsgBox "La celda es texto"

También puede crear sus propias Funciones Definidas por el Usuario (UDFs). A continuación crearemos una simple función booleana que devuelva TRUE. Luego llamaremos a esa función en nuestra sentencia If:

Sub If_Funcion()
    If FuncionVerdadero Then
        MsgBox "True"
    End If
End Sub
 
Function FuncionVerdadero() As Boolean
    FuncionVerdadero = True
End Function

Sentencia If funcion booleano

Comparación de texto

También puede comparar texto de forma similar a la comparación de números:

Msgbox "a" = "b"
Msgbox "a" = "a"

Al comparar texto, debe tener en cuenta si el (Case) tipo de letra  (mayúsculas o minúsculas). Por defecto, VBA considera que las letras con diferentes (Case) no coinciden. En otras palabras, «A» <> «a».
Si desea que VBA ignore las mayúsculas y minúsculas, debe añadir la declaración de Opción de Comparación de Texto
en la parte superior de su módulo:

Option Compare Text

Después de hacer esa declaración «A» = «a»:

Option Compare Text
 
Sub If_Text()
   MsgBox "a" = "A"
End Sub

VBA If Like

El Operador Like  de VBA le permite hacer comparaciones inexactas de texto. Haga clic en el enlace «Operador Like» para aprender más, pero mostraremos un ejemplo básico a continuación:

Dim nombre String
nombre = "Mr. Charles"
 
If nombre Like "Mr*" Then
    MsgBox "True"
Else
    MsgBox "False"
End If

Aquí estamos usando un comodín de asterisco «*». El * representa cualquier número de caracteres. Así que la declaración If anterior devolverá TRUE. El operador Like es una herramienta extremadamente poderosa, pero a menudo subutilizada, para tratar con texto.

Bucles If

Los bucles de VBA le permiten repetir acciones. La combinación de IF-ELSEs con bucles es una gran manera de procesar rápidamente muchos cálculos. Continuando con nuestro ejemplo de Positivo / Negativo, agregaremos un Bucle For Each para recorrer un rango de celdas:

Sub If_Bucle()
Dim Celda As Range
 
  For Each Celda In Range("A2:A6")
    If Celda.Value > 0 Then
      Celda.Offset(0, 1).Value = "Positivo"
    ElseIf Celda.Value < 0 Then
      Celda.Offset(0, 1).Value = "Negativo"
    Else
      Celda.Offset(0, 1).Value = "Cero"
     End If
  Next Celda
End Sub

Sentencia If Bucle

Ejemplos de If Else

Ahora veremos algunos ejemplos más específicos.

Comprobar si la celda está vacía

Este código comprobará si una celda está vacía. Si está vacía ignorará la celda. Si no está vacía, enviará el valor de la celda a la celda de la derecha:

Sub If_Celda_Vacia()
    If Range("a2").Value <> "" Then
        Range("b2").Value = Range("a2").Value
    End If
End Sub

If celda vacia

Comprobar si la celda contiene un texto específico

La función Instr
comprueba si una cadena de texto se encuentra en otra cadena. Utilícela con una sentencia If para comprobar si una celda contiene un texto específico:

If Instr(Range("A2").value,"texto") > 0 Then
  Msgbox "Texto Encontrado"
End If

Comprobar si la celda contiene texto

Este código comprobará si una celda es texto:

Sub If_Celda_Es_Texto()
  If Application.WorksheetFunction.IsText(Range("a2").Value) Then
    MsgBox "Celda contiene texto"
  End If
End Sub

If Goto

Puede utilizar el resultado de una sentencia If para «Ir a» otra sección de código.

Sub IfGoTo()
    If IsError(Cell.Value) Then
        GoTo Skip
    End If
    'Algo de código
 
Skip:

End Sub

Borrar fila si la celda está en blanco

Usando Ifs y bucles puede probar si una celda está en blanco y si es así borrar toda la fila

Sub borrarFilaSiCeldaEsBlanco()
    Dim Celda As Range
     
    For Each Celda In Range("A2:A10")
        If Celda.Value = "" Then Celda.EntireRow.Delete
    Next Celda
End Sub

If MessageBox Sí / No

Con los cuadros de mensaje de VBA
puede pedir al usuario que seleccione entre varias opciones. La Caja de Mensajes Si/No le pide al usuario que seleccione Si o No. Usted puede agregar una Caja de Mensajes Si/No a un procedimiento para preguntarle al usuario si le gustaría continuar ejecutando el procedimiento o no. Usted maneja la entrada del usuario usando una sentencia If.

Aquí está el Cuadro de Mensajes Sí/No en la práctica:

msgbox condicionales

Sub MsgBoxVariable()
    Dim respuesta As Integer
    respuesta = MsgBox("Quiere continuar?", vbQuestion + vbYesNo)
    If respuesta = vbYes Then
      MsgBox "Si"
    Else
      MsgBox "No"
    End If
End Sub

VBA If, ElseIf, Else en Access VBA

Las funciones If, ElseIf y Else funcionan exactamente igual en Access VBA que en Excel VBA. Puede utilizar una sentencia If para comprobar si hay registros en un Recordset. vba yes no msgbox

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples