我正在开发一个 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
?
谢谢!
尝试制作自己的函数,如下所示:
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函数