替换 VBA IIF 函数

问题描述 投票:0回答:1

我正在开发一个 Excel 项目,该项目涉及将大量 Excel 4.0 宏表函数转换为 VBA。这些函数广泛使用工作表

IF(condition,ifTrue,ifFalse)
函数。

转换进展顺利,因为大多数宏表语句直接转换为 VBA,但有一个棘手的问题。工作表

IF(condition,ifTrue,ifFalse)
仅评估必要的
ifTrue
ifFalse
子句,而 VBA
IIF(condition,ifTrue,ifFalse)
函数 always 评估这两个子句。问题在于,宏表代码中的许多
IF
语句都是为了预期工作表函数的行为而编写的。问题的一个示例:对于
a=0
IF(a>0, a+1/a, 0)
将返回
0
,但
IIF(a>0, a+1/a, 0)
会崩溃,因为
ifTrue
子句中存在除以 0 的情况,即使未使用该子句。

由于某种原因,Excel WorksheetFunction 对象确实公开了

IF
。考虑到该函数的使用次数,使用 VBA 的
IF(condition,ifTrue,ifFalse)
重写所有
IF...Then...Else
语句将非常乏味。

是否有一个库具有 VBA 的替代

IIF
函数,其行为类似于工作表
IF
函数,或者是否有某种方法使 WorksheetFunction 对象公开
IF

谢谢!

excel vba function if-statement iif
1个回答
0
投票

尝试制作自己的函数,如下所示:

Function xif(cond As Boolean, xtrue As Variant, xfules As Variant) As Variant
If cond Then Result = xtrue Else Result = xfules
xif = Result
End Function

现在您可以在Excel工作表或VBA中调用xif函数

© www.soinside.com 2019 - 2024. All rights reserved.