Función VBA IIF

Este tutorial explicará cómo usar IIF en VBA

La función VBA IIF es similar a usar la función IF en Excel. Prueba si se cumple una condición, devolviendo un valor (o cálculo) si es VERDADERO, otro valor (o cálculo) si es FALSO.

Es similar a la declaración If de VBA, muchos lo consideran un atajo para usar este método, ya que solo necesita escribir una línea de código para obtener el resultado deseado en lugar de usar un Si … Entonces … Else … Fin Si rutina. Sin embargo, debe usarse correctamente ya que puede ocasionar problemas en su código.

Sintaxis IIF

La función IFF consta de 3 partes: la prueba lógica, la parte verdadera y la parte falsa.

  • Expresión:La prueba lógica que se va a realizar.
  • Parte verdadera: El resultado que se devolverá si la prueba lógica es VERDADERA.
  • Parte falsa: El resultado que se devolverá si la prueba lógica es FALSA.

Escribir un procedimiento de función IIF

123 Función GetNames (strName como cadena) como cadenaGetNames = IIf (strName = "John", "El nombre es John", "El nombre no es John")Función final

En la función anterior, podemos usar un subprocedimiento para probar y ver si la variable que pasamos a la función es la cadena "John"

123 Sub TestGetNamaes ()MsgBox GetNames ("John")End Sub

Si tuviéramos que ejecutar el subprocedimiento TestGetNames, llamaría a la función GetNames y devolvería un cuadro de mensaje.

Si hubiéramos utilizado el método If en su lugar, el código se habría visto así:

1234567 Función GetNames (strName como cadena) como cadenaSi (strName = "John") EntoncesGetNames = "El nombre es John"DemásGetNames = "El nombre no es John"Terminara siFunción final

Hemos escrito efectivamente una línea de código en lugar de 5 líneas de código, ¡impresionante!

¿Por qué usar If en su lugar?

Considera lo siguiente

123 Función GetNames (strName como cadena) como cadenaGetNames = IIf (strName = "John", MsgBox ("El nombre es John"), MsgBox ("El nombre no es John"))Función final

Ahora, si ejecuta el siguiente subprocedimiento para llamar a su función

123 Sub TestGetNames ()GetNames ("John")End Sub

Obtendría el mismo cuadro de mensaje que antes, pero inmediatamente después de eso, ¡obtendría el siguiente cuadro de mensaje!

La función IIF ejecuta las secciones VERDADERO y FALSO de la línea de código; no sale del código una vez que ha encontrado que la condición es verdadera; también ejecuta la sección falsa, lo que nos da un mensaje falso en el segundo cuadro de mensaje. Si hubieras usadoSi … Entonces … Else … Fin Si - esto no habría ocurrido - la función SI solo ejecuta la sección VERDADERO o FALSO del código - dependiendo de la lógica que se pasa al código.

El código está mal diseñado (¡a propósito!) Y los cuadros de mensaje se mantienen dentro de la línea de código en la que se encuentra la instrucción IIF en lugar de después del código o en la subrutina. Como la función IIF ejecuta las secciones VERDADERO y FALSO de la declaración, se devuelven ambos mensajes.

Podríamos corregir este error moviendo el cuadro de mensaje debajo de la línea de función IIF, como en el código a continuación, o moviendo el cuadro de mensaje al Subprocedimiento como en el primer ejemplo de este artículo.

1234 Función GetNames (strName como cadena) como cadenaGetNames = IIf (strName = "John", "El nombre es John", "El nombre no es John")MsgBox (GetNames)Función final

Si tiene cuidado al escribir su código, la función IIF puede ahorrarle muchas líneas de código y escribir más.

IIF anidados

Podemos anidar la función IIF de manera similar a anidar la función SI, pero una vez más, todo se hace en una línea.

123 Función GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Función final

Entonces podríamos llamar a esta función desde un subprocedimiento

12345 Sub FindDiscount ()Dim dblP como dobledblP = 899MsgBox ("El descuento que puede obtener es" & GetDiscount (dblP) & "%")End Sub

o puede llamarlo desde Excel, usándolo como una UDF (función definida por el usuario)

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

wave wave wave wave wave