Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Ejemplos de If en VBA

La instrucción If Then else en VBA es necesaria para tomar decisiones dentro del código en VBA.

Esta estructura tiene un comportamiento similar a Función SI en Excel, y también es conocida como bucle IF

Sintaxis de IF THEN ELSE

La sintaxis completa es como sigue:

If condición Then

[Instrucciones a ejecutar]

[ ElseIf condición2 Then 

[Instrucciones a ejecutar]]

[ Else

[Instrucciones a ejecutar]]

End If

La parte correspondiente al ELSEIF  como al ELSE son opcionales, por lo que la estructura podría quedar de las siguientes formas: 

IF ELSEIF

En esta alternativa pueden quedar situaciones en las que no cumplan ni el primer ni el segundo conjunto de instrucciones.

If condición Then

[Instrucciones a ejecutar]

[ ElseIf condición2 Then 

[Instrucciones a ejecutar]]

End If

IF THEN ELSE END IF

En esta segunda alternativa siempre si la "condición" no se cumple, se ejecutarán las instrucciones correspondientes al ELSE, es decir siempre se ejecutará una de las dos instrucciones.

If condición Then

[Instrucciones a ejecutar]

[ Else

[Instrucciones a ejecutar]]

End If

IF THEN 

Tomando en cuenta que tanto el ELSEIF como el IF son opcionales, el código podría quedar de la siguiente forma, en la que solo si se cumple la "Condición" se ejecutarán las instrucciones que se encuentran dentro del IF.

If condición Then

[Instrucciones a ejecutar]

End If

IF THEN ELSE

Si se escribe todo en una sola línea, se debe prescindir del end if. 

If condition Then [Instrucciones a ejecutar]  [ Else [ Instrucciones a ejecutar] ]

 

Parte de la sintaxis de IF THEN ELSE

¿Qué es IF?,  es el inicio de del bucle IF THEN ELSE.

En esta estructura "condición" representa el caso que debe cumplirse para que se ejecute la primera parte de la condición, si se quieren usar varias condiciones será necesario usar los operadores lógicos en VBA.

Elseif es una parte opcional que se ejecutaría solo si la parte anterior no se cumple y se requiere añadir alguna otra condición

Mientras que "else" hace que todos los casos en los que no se haya cumplido ninguno de los casos previos se pueda ejecutar las instrucciones siguientes, así tendríamos por ejemplo:

Sub EjemploIfThenElse()

a = 12

If a = 8 Then

MsgBox "1"

ElseIf a = 12

Then MsgBox "2"

Else

MsgBox "3"

End If

End Sub

Si "a" vale 8 entonces se ejecutaría el primer mensaje, si "a" en cambio valiese 12 se ejecutaría el segundo mensaje, en todos los demás valores posibles de "a" se ejecutaría el tercer mensaje.

IF THEN ELSE Ejercicios

En los siguientes ejemplos se puede encontrar una gran variedad de usos de if en vba, desde ejemplos, sencillos de IF THEN ELSE, hasta ejemplos anidados, y aplicados en la resolución de diversos problemas. 

  1. Sorteo en Excel con Macros
  2. Doble condicional en VBA
  3. Encontrar palabras usando If then else
  4. If ... Then - Cálculo de Contribución Tributaria Mensual bajo Régimen RUS
  5. If then else aplicado al cálculo de precio y descuento de producto.
  6. Buscador personalizado de stock - If then Else
  7. IF THEN ELSE para mostrar: APROBADO o DESAPROBADO
  8. Ejemplo Programa de Educación Financiera
  9. Estimación de la cantidad de cajeros corresponsales a instalar
  10. Aprobación de Tarjeta mediante Estructura if then else
  11. IF then - Incremento de producción condicional
  12. Ejemplo de If then Else - Aplicado al cálculo de beneficios para el personal
  13. Ejemplo If then else: Evaluación de Proyectos
  14. Ejemplo If then Else con el Scoring
  15. Clasificación del Grupo Etáreo del MINSA
  16. Uso de DO LOOP para el ejercicio del nivel estudiantil (con IF THEN )
  17. Ejemplo de If then Else aplicado al Cálculo del Promedio Final de un Curso
  18. Ejemplo de Select Case y If ... Then aplicado a la conversión de Tipo de cambio
  19. If Plan Postpago - Prepago Celular
  20. Ejemplo de If then Else aplicado a descuento por tardanzas
  21. Ejemplo de If..Else aplicado a la valuación de opciones "Call" y "Put"
  22. Ejemplo de If then Else aplicado a la aprobación de un préstamo
  23. Ejemplo de if then else aplicado al craest
  24. Userform: Ejemplo de If Then and Else aplicado a la toma de Pagares
  25. Ejemplo de If then else aplicado al Cálculo de Descuentos por Volumen de Compra
  26. Ejemplo de IF THEN ELSE para el cambio de un numero en base menor a 10
  27. Ejemplo de If Then Else aplicado a verificación de fechas
  28. Aplicación de IF THEN ELSE a Put Options
  29. Estructura IF THEN ELSE aplicado a gratificaciones
  30. Ejemplo de uso de IF then else (VBA)
  31. Ejemplo de uso de IF then else (desde formulario)

24 comentarios

  1. Hola
    Mi problema es que quiero que al introducir un valor menor a 650000 empiece de nuevo el ciclo hasta que el usuario ingrese un valor correcto y no se grave el valor incorrecto

    Seria de gran ayuda si me ayudaras 🙂

    es un formulario

    If vseguro >= 650000 Then
    lstvs.AddItem vseguro
    Else
    MsgBox ("El Valor dìgitado" & " " & vseguro & " " & "No es correcto.")
    End If

    todo el codigo

    Private Sub chkpa_Click()
    If chkpa = True Then
    lblpa.Caption = Round(lbltsv.Caption) * 150000

    Else
    lblpa.Caption = "No Tiene Puntos"

    End If

    End Sub

    Private Sub cmdcalcular_Click()

    Dim nom, i, tseguro As String
    Dim vseguro, tsv, pa As Double

    acum = 0
    i = "s"

    While (i = "s" Or i = "S")

    nom = InputBox("Digite El Nombre Asesor")
    txtna.Text = nom
    'nombre asesor - txtna

    tseguro = InputBox("Digite El Tipo Seguro")
    'nombre asesor - lst
    lstts.AddItem tseguro

    vseguro = InputBox("Digite El Valor Seguro")

    If (vseguro >= 650000) Then
    lstvs.AddItem vseguro
    Else
    MsgBox ("El Valor dìgitado" & " " & vseguro & " " & "No es correcto.")
    End If

    'Tipo seguro debe ser mayor a 650000
    i = InputBox("Desea continuar s/n")

    acum = acum + vseguro
    Wend
    lbltsv.Caption = acum
    MsgBox ("Registro Realizado Con Exito")

    End Sub

    Private Sub cmdinforme_Click()
    MsgBox (" El Asesor " & nom & " Obtuvo un total de seguros vendidos de " & lbltsv.Caption & " Y Una Comision De : " & lblc.Caption & " Obtuvo Puntos ? " & lblpa.Caption)

    End Sub

    Private Sub cmdlimpiar_Click()
    txtna.Text = Clear
    lstts.Clear
    lstvs.Clear
    lbltsv.Caption = Clear
    lblpa.Caption = Clear

    End Sub

    Private Sub CommandButton1_Click()
    Unload Me
    End Sub

    Private Sub lstvs_Click()

    End Sub

    Private Sub optc12_Click()
    If optc12 = True Then
    lblc.Caption = lbltsv.Caption * 12 / 100
    End If

    End Sub

    Private Sub optc5_Click()
    If optc5 = True Then
    lblc.Caption = lbltsv.Caption * 5 / 100
    End If

    End Sub

    Private Sub UserForm_Click()

    End Sub

  2. El If en VBA es muy importante porque te permite identificar en que ocasiones realizaras diversas actividades. Además te permite poner una condicionante, como if y se coloca alguna acción, then if y la condicional. Muchas páginas las usan como por ejemplo considero que Cineplanet lo emplea, ya que selecciona el lugar de residencia en donde se encuentra, el cine que se encuentra en dicho lugar y luego se procede a seleccionar la pelicula que se encuentra disponible en dicho cine. If es una función muy util para muchas empresas.

  3. Estructura IF
    Para programar: Tres columnas, primera Trabajador, segunda Sueldo y tercera Categoria -
    Si el sueldo estas entre 1000 y 3000 categoria A , caso contrario debe decir Categoria B.

    Estructura IF
    Similar agragando una columna a su derecha: Si el sueldo es mayor a 1000 y su categoria es A, su bonificacion es del 15% del sueldo, caso contrario su bonificacion es del 5% del sueldo.

  4. If- Then- Else.

    Cuando se encuentra una instrucción If...Then...Else, se prueba una condición. Si la condición es "verdadera", se ejecutan las instrucciones que están a continuación de Then. Si la condición es Falsa, cada instrucción Else-If (si hay alguna) se evalúa en orden. Cuando se encuentra una else-if-condition que sea verdadera, se ejecutan las instrucciones que siguen inmediatamente a la instrucción Else-If asociada. Si else-if-condition se evalúa como verdadera, o si no hay ninguna instrucción Else-If, se ejecutan las instrucciones situadas después de Else. Después de la ejecución de las instrucciones que siguen a Then, ElseIf o Else, la ejecución continúa con la instrucción que sigue a End If.
    Las cláusulas Else-If y Else son opcionales. Puede tener tantas cláusulas Else-If como desee en una instrucción If...Then...Else, pero no puede aparecer ninguna cláusula Else-If después de una cláusula Else. If ...Then...Else las instrucciones se pueden anidar una dentro de otra.
    Con la sintaxis de varias líneas, la instrucción If debe ser la única instrucción incluida en la primera línea. Las instrucciones ElseIf, Else y End If pueden ir precedidas solamente por una etiqueta de línea. El bloque If...Then...Else debe terminar con una instrucción End If.

  5. Hola, buen día.
    Espero me puedan ayudar en la siguiente situación, realice la siguiente programación. Copiar datos de la "Hoja1" y pegarlos en la "Hoja2"
    Sub()
    Sheets("Hoja1").Select
    Cells(2,1).Select
    PrimerValor=ActiveCell
    Range("A1").Select
    ActivarValor=ActiveCell
    Sheets(ActivarValor).Select
    Cells(1,1).Select
    Cells(1,1)=PrimerValor

    Sheets("Hoja1").Select
    Cells(3,1).Select
    PrimerValor=ActiveCell
    Range("A1").Select
    ActivarValor=ActiveCell
    Sheets(ActivarValor).Select
    Cells(1,2).Select
    Cells(1,2)=PrimerValor

    Sheets("Hoja1").Select
    Cells(4,1).Select
    PrimerValor=ActiveCell
    Range("A1").Select
    ActivarValor=ActiveCell
    Sheets(ActivarValor).Select
    Cells(1,3).Select
    Cells(1,3)=PrimerValor
    End

    Y así sucesivamente hasta repetir la acción 11 veces. De acuerdo a esto, notaran que los únicos valores que van cambiando(aumentando), son el número de fila de la "hoja1" y el número de columna de la "Hoja2"

    Espero me puedan ayudar en ver la manera de resumir y agilizar esta programación, tengo una vaga idea de que pueda ser con la "If y GoTo" pero no logro realizarlo, O de alguna otra manera que se pueda.

    De antemano, gracias por su apoyo y atención a todos.

    Saludos

  6. Buenas noches . necesito saber como referenciar una celda con macro. Ejemplo.

    Valor= Range("A1"). Value
    If valor>= ("B10") then**aqui me da error.
    RGB= interior.color(255,0,0)
    Else
    RGB= interior.color(0,0,0)

    End if
    Next

    • hola andres prueba de esta manera!

      Valor= Range(“A1”). Value
      If valor>= range(“B10”) then.
      RGB= interior.color(255,0,0)
      Else
      RGB= interior.color(0,0,0)
      End if
      Nex

      saludos..

  7. Buenos dias mi nombre es Maurizio y mi problema es el siguiente: mediante la inserción de un UseForm me gustaría crear un reloj analógico, que vio en Internet usted encontrará poco o nada.
    Pero como que ya había creado los años que se encontraban en VB6, ahora costumbre crear usando sólo VBA que me da problemas, no sería tan clase a darle una mirada y realice los cambios necesarios para que también puede trabajar con un UserForm gracias de antemano por la ayuda te me dan sobre saludos desde a. Maurice. (PS) A mí sólo me haría demasiado ver cómo operar una mano luego puedo tratar conmigo.

  8. Consulta...

    Tengo que agregar un botón a mi planilla de excel, para poder enviar un mail y que los destinatarios de ese mail dependan del valor de una celda.
    Si tal dice "GEA PROCESS" tales destinatarios..y asi..

    Este es mi ejemplo y no me funciona.

    Sub Enviar_Mail()

    'Declarar variables
    Dim OLApp As Outlook.Application
    Dim OLMail As Object

    'Abrir la aplicacion Outlook y crear el email
    Set OLApp = New Outlook.Application
    Set OLMail = OLApp.CreateItem(0)
    OLApp.Session.Logon

    'Detallar los elementos del email, a quienes enviar, titulos, y archivo a adjuntar

    CATEGORIA = Worksheets("Cash ARS").Range("H1").Value

    If CATEGORIA = "GEA Process" Then
    With OLMail
    .To = "correo@correo.com; correo@correo.com"
    .CC = "correo@correo.com"
    .BCC = ""
    Sheets("Ingreso").Select
    .Subject = Range("E3")

    .Body = "Buen dia se adjunta archivo de rendición de gastos"
    .Attachments.Add ActiveWorkbook.FullName
    .Display
    End With
    End If

    If CATEGORIA = "GEA Farm" Then
    With OLMail
    .To = "correo@correo.com"
    .CC = "correo@correo.com"
    .BCC = ""
    Sheets("Ingreso").Select
    .Subject = Range("E3")

    .Body = "Buen dia se adjunta archivo de rendición de gastos"
    .Attachments.Add ActiveWorkbook.FullName
    .Display

    End With
    End If

    If CATEGORIA = "GEA Westfalia" Then
    With OLMail
    .To = "correo@correo.com"
    .CC = "correo@correo.com"
    .BCC = ""
    Sheets("Ingreso").Select
    .Subject = Range("E3")

    .Body = "Buen dia se adjunta archivo de rendición de gastos"
    .Attachments.Add ActiveWorkbook.FullName
    .Display

    'Limpiar datos almacenados en las variables definidas
    Set OLMail = Nothing
    Set OLApp = Nothing
    End With
    End If

    End Sub

    • Esta bien el código, recuerde que la comparación realizada con el IF distingue entre mayúsculas y minúsculas, tiene que añadir la librería correspondiente (y tener el outlook abierto)

      https://www.excel-avanzado.com/17122/enviar-un-rango-de-celdas-como-adjunto-en-correo.html

  9. su información me sirvió de mucho

  10. Un atento y cordial saludo

    Mi pregunta es la siguiente:

    Estoy haciendo una base de datos de alumnos, quiero que en la columna "A" celda A2, A3, A4, A5... aparezca un prefijo seguido de un consecutivo (AL001, AL002, AL003, AL004) asi sucesivamente tan pronto lleno la fila de tados del alumno, (que cuando termine de introducir el último dato, aparezca lo antes mencionado)

  11. Buenas Tardes, una mano para una ayuda por favor
    tengo un dato traido por un formulario para entregarlo a una celda.
    son 3 columnas y el dato debe compararse ejemplo si, no o talvez y poner
    una x en alguna de las tres columnas
    como lo puedo manejar

  12. Necesito que me ayuden con un macro donde a medidas que vayan pasando el tiempo se vaya congelando los meses y llenando los campos del mes que corresponda. Por ejemplo:

    Enero 98% (Valor trabajando, pero como ya paso el tiempo, se congela)
    Febrero 89%
    Marzo 70%
    Abril (Mes vigente en el cual se debe ir actualizando con respecto a los avances del proyecto)
    Mayo (Mes vacío porque aún no hemos llegado a ese mes)

  13. Hola soy Schmid Barrientos

    Me gustaria saber si hay alguna forma de que en caso no se cumplan las condiciones establecidas en el if, elseif y por lo tanto se llegue al else, de no cumplirse else se regrese a la condicion inicial. Por ejemplo binario solo puede tomar el numero 1 o 2, si toma 3 debera aparecer un imputbox diciendo solo puede tomar el numero 1 o 2 . Inmediatamente se debe volver a preguntar el ingreso del numero o 2 mas no deberá terminarse la macro.

    binario = InputBox("Ingrese el número 1 o el número 2")

    If binario = 1 Then

    Range("a3") = Int(N)
    For x = 1 To N

    Cells(3, x + 1) = Round(Cells(3, x) / -2, 2)

    Next

    ElseIf binario = 2 Then

    Range("a6") = Int(N)
    For x = 1 To N Step 3

    Cells(6, x + 1) = Round(Cells(6, x) * -3, 2)
    Cells(6, x + 2) = Round(Cells(6, x + 1) / -2, 2)
    Cells(6, x + 3) = Round(Cells(6, x + 2) + 2, 2)

    Next

    Else
    MsgBox "Solo puede ingresar el número 1 o el 2"

    ' aca me gustaria que vuelve a preguntar por el ingreso de 1 o 2 , osea que pueda volver a llamar a la variable binario y la ejecute y no cierre la macro. Existe una forma?

    End If

  14. hola buenas mi nombre es carlos, una pregunta como se hace para que la formula reconozca, dos columnas y me arroje un resultado. con la condición cuando se introduzca un valor de una de esas columnas verifique ese valor y lo ponga en otra celda

  15. Hola mi nombre es Salvador, como programar un código VBA para que al poner en la celda ("D3") un nº 5, me salga un cuadro InputBox solicitando una cifra de 4 números y una ves puestos, al dar intro que los inserte en la celda ("F3") de la misma hoja Gracias anticipadas

  16. Hola mi nombre es Salvador, como programar un código VBA para que al poner en la celda («D3») un nº 5, me salga un cuadro InputBox solicitando una cifra de 4 números y una ves puestos, al dar intro que los inserte en la celda («F3») de la misma hoja Gracias anticipadas

    Option Explicit

    Private Sub Worksheet_SelectionChange(ByVal TARGET As RANGE)
    Dim Tipo As String ' no se si es asi, todavia esto verde
    If ("D3") = 5 Or 6 Or 7 Or 8 Then 'en "Celda D3" yo pongo uno de estos numeros

    InputBox ' quiero que salga InputBox y que me pida un dato
    ' yo coloco por ejemplo 1230
    'al dar intro me coloque 1230 en la celda "F3", se quita el cuadro de dialogo y listo.

    End If
    End Sub

  17. Buenos dias,

    Como puedo realizar esta operación en VBA

    Si el valor es menor a 1'000.000 al frente debe ponerse 8 %

    Si el valor esta entre 1'000.000 y 2'000.000 al frente debe ponerse 10 %

    Si el valor es mayor a 2'000.000 al frente debe ponerse 11 %

  18. Buenas tardes, estoy empezando en el mundillo del Vba y las macros y necesito una pequeña ayudilla..

    Como podría indicarle a una macro lo siguiente:
    - Si el valor introducido en la celda C9 de la hoja1 NO ES IGUAL a uno de los valores de la columna2 de la Hoja2, entonces MsgBox "USUARIO NO AUTORIZADO" .

    He hecho un sencillo formulario de consulta con imágenes para consultar los vehículos autorizados de un párquing, y para ello me he servido de un par de macros y alguna fórmula de BuscarV y Condicional. Pero todo ello con ayuda de la grabadora de macros y auto aprendizaje de lo que he ido aprendiendo en foros. De ahí mi consulta

    Muchas gracias de antemano!

  19. Buenas,quisiera que alguien me pudiese ayudar a realizar el método de integración por Simpson,y quisiera que al elegir la primera o la segunda regla de Simpson se introduzca automáticamente una sucesión de número de las siguiente manera
    1°regla de Simpson: 1,4,2,4,2,.....,2,4,1
    2°regla de Simpson:1,3,3,2,....2,3,3,1
    Le agradecería mucho a quien pudiese ayudarme.

  20. Buenos días
    Hice esta macro con If no sé porque no reconoce el End If , les agradecería que me ayudaran

    Private Sub cmdvalidar_Click()
    'Declaracion de variables
    Dim Nombre As String
    Dim Apellido As String
    Dim Nota1 As Integer
    Dim Nota2 As Integer
    Dim Nota3 As Integer
    Dim Promedio As Integer
    Dim Status As String

    'Solicitud de datos
    Nombre = InputBox("Ingrese su Nombre")
    Apellido = InputBox("Ingrese su Apellido")
    Nota1 = InputBox("Ingrese su Primera Nota")
    Nota2 = InputBox("Ingrese su Segunda Nota")
    Nota3 = InputBox("Ingrese su Tercera Nota")

    'Guardo las variables en la hoja
    Range("C11").Value = Nombre & " " & Apellido
    Range("C13").Value = Nota1
    Range("C15").Value = Nota2
    Range("C17").Value = Nota3
    Range("C19").Value = Promedio
    Range("C21").Value = Status

    'Usando If
    If Promedio >= 13 Then
    Status = Aprobado
    Else
    If Promedio < 13 Then
    Status = Desaprobado
    End If

    'Calcular promedio
    Promedio = (Nota1 + Nota2 + Nota3) / 3

    End Sub

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.