Does VBA Have a Ternary Operator?

As an alternative you can create the following public function in a module:

Public Function iff(expr, trueR, falseR) As Variant
    If expr Then iff = trueR Else iff = falseR
End Function

So far works for me.


the closest function is IIf()

IIf(expr, truepart, falsepart)

but:

  • you can't have its branches simply running code, while you have to assign its return value to some variable,

  • it doesn't short-circuit,

    it always evaluates both branches so that should one of them fail, even if not the "real" one, the statement would throw an error anyway.

So the most resembling statement is:

If boolVar Then sub1 Else sub2 

where:

  • boolVar is a boolean type variable,

  • sub1 and sub2 are two different subs/functions to be called.


Sub test()

    Dim x As Long
    Dim y As Long
    y = 1
    x = IIf(y = 1, 1, 2)

End Sub

Tags:

Excel

Vba