为什么可选参数不同于UDF的工作表IF()函数的语法?
从来没有真正深入的思考,但为什么一个=IF()
函数要求你传递逗号,即使最后2个参数是可选的?
=IF(logical_test, [value_if_true], [value_if_false])
为什么我们不能叫它呢?
=IF(TRUE)
获得TRUE
( logical_test评估为TRUE时的默认返回值 )
我们不得不称之为提供两个逗号之间即使离开参数丢失/空…
=IF(TRUE, ,)
在使用可选参数的UDF中,我们不需要传递逗号( 更简单的原始IF版本,error handling没有实现,因为这里不需要 )
Public Function MYIF(logical_test, Optional value_if_true$ = "TRUE", Optional value_if_false$ = "FALSE") MYIF = IIf(Evaluate(logical_test), value_if_true, value_if_false) End Function
当从电子表格调用时,我们可以省略逗号
=MYIF(TRUE)
除了Spolsky之外,任何人都知道我们为什么需要在使用native =IF()
时提供逗号的原因?
我在Excel 2010中只是注意到了2007需要2个参数 。还有,2010年的function定义显示为第1位,后2位可选。 任何解释?
更新:
我知道=1=1
和=AND(TRUE,FALSE)
语法,我没有寻找替代=IF()
的短手版本。 相反,我问的是
为什么需要提供原始=IF()
因为最后2个参数是可选参数?
“可选参数”对Excel函数显然有两个不同的含义:
-
可选参数可以省略;
-
可选参数的值可以省略。
有时候都是允许的,有时候只允许#2。
查看IF
的文档:
IF(logical_test, [value_if_true], [value_if_false])
[…]
value_if_false
可选。 […]如果
logical_test
计算结果为FALSE
且省略了value_if_false
参数 ,则IF
函数返回逻辑值FALSE
。如果
logical_test
计算结果为FALSE
并且省略了value_if_false
参数的值 ,则IF
函数返回值0(零)。
好的,都是允许的。 所以=IF(FALSE,)
(省略参数)返回FALSE
,而=IF(FALSE,,)
(参数有但省略)返回0。
但是对于value_if_true
参数,根据文档只允许选项#2。 没有完全忽略这个论点的规定。 只支持省略其值。 所以=IF(TRUE,)
和=IF(TRUE,,)
(其中的参数,但省略值)都返回0,而=IF(TRUE)
(完全省略参数)不支持,因此不编译。
以上描述了logging和支持的行为。 当然,这并不能回答“为什么”这个更深的问题。 我的答案是,我不知道。 我确信Excel的制造者有一个很好的理由,或者至less他们认为他们是这么做的。
至于UDF,它们是用VBA编写的,它们的Optional
参数是由VBA规则pipe理的,这些规则是不同的。 在VBA函数中不存在“省略”参数的值。