1 votos

Función VBA IIf resultado diferente a If Then Else

La función definida por el usuario Excel VBA Office 365 Mac (Versión 16.86 (24051422)) en macOS Ventura 13.6.7 genera resultados diferentes si se utiliza una función "IIf" en lugar de una declaración "If Then Else". Los ejemplos siguientes:

Function myMOD3(a As Double, b As Double) As Variant
 `   myMOD3 = IIf(b = 0, "NaN", a - b * (a \ b))
    myMOD3 = IIf((b <> 0), (a - b * (a \ b)), ("NaN"))
End Function

Function myMOD4(a As Double, b As Double) As Variant
    If b = 0 Then
        myMOD4 = "NaN"
    Else
        myMOD4 = a - b * (a \ b)
    End If
End Function

La primera función, myMOD3 funciona. Sin embargo, cuando "b" es igual a 0, genera un error de división por cero si se llama desde un Sub en VBA o "#VALUE!" cuando se llama desde Excel. Por alguna razón, la función "IIf" no captura b=0 o b<>0 (el código comentado tiene el mismo resultado) lo que resulta en la devolución de "NaN".

La segunda función, myMOD4, también funciona bien. Cuando b=0, responde correctamente devolviendo "NaN". Ambas funciones deberían producir resultados idénticos.

¿Es solo una extraña característica de MS VBA? En otras situaciones, la función IIf parece funcionar como se espera. ¿Alguien tiene alguna idea?

0voto

Andrew Duncan Puntos 19

Debería haber leído la referencia de MS VBA un poco más detenidamente. En la sección de Observaciones para la función IIf está la declaración "IIf siempre evalúa tanto truepart como falsepart, aunque solo devuelve uno de ellos.". Había asumido que el IIf era una declaración If ternaria normal similar a otros lenguajes de programación. Qué tonto de mi parte.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X