为什么可选参数不同于UDF的工作表IF()函数的语法?

从来没有真正深入的思考,但为什么一个=IF()函数要求你传递逗号,即使最后2个参数是可选的?

 =IF(logical_test, [value_if_true], [value_if_false]) 

为什么我们不能叫它呢?

 =IF(TRUE) 

获得TRUElogical_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函数显然有两个不同的含义:

  1. 可选参数可以省略;

  2. 可选参数的可以省略。

有时候都是允许的,有时候只允许#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函数中不存在“省略”参数的值。