4 excel vba if-statement worksheet-function excel-vba
从来没有真正深入思考这个,但为什么=IF()函数要求你传递逗号,即使最后2个参数是可选的?
=IF(logical_test, [value_if_true], [value_if_false])
Run Code Online (Sandbox Code Playgroud)
为什么我们不能称之为
=IF(TRUE)
Run Code Online (Sandbox Code Playgroud)
获取TRUE(当logical_test评估为TRUE 时的默认返回值)
我们不得不称它为中间提供两个逗号,即使在保留参数缺失/空...
=IF(TRUE, ,)
Run Code Online (Sandbox Code Playgroud)
在UDF中使用可选参数时,我们不需要传递逗号(原始IF的版本更简单,错误处理未实现,因为这里不需要)
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
Run Code Online (Sandbox Code Playgroud)
从电子表格调用时,我们可以省略逗号
=MYIF(TRUE)
Run Code Online (Sandbox Code Playgroud)
任何人,除了Spolsky;),都知道为什么我们需要在使用本机时提供逗号=IF()?
我在Excel 2010中,但只是注意到2007需要2个参数 ..但是,在2010年,函数定义显示第一个需要,最后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)(完全省略参数)不受支持,因此不编译.
以上描述了记录和支持的行为.当然,这并不能回答"为什么"就是这样的更深层次的问题.我的回答是,我不知道.我确信Excel的制造商有充分的理由,或者至少认为他们做到了.
至于UDF,它们是用VBA编写的,它们的Optional参数由VBA的规则控制,这些规则是不同的.在VBA函数中没有省略"参数的值"这样的事情.