Vba 为什么带有可选参数的工作表IF()函数的语法与UDF不同?
从来没有认真考虑过这一点,但是为什么Vba 为什么带有可选参数的工作表IF()函数的语法与UDF不同?,vba,excel,if-statement,worksheet-function,Vba,Excel,If Statement,Worksheet Function,从来没有认真考虑过这一点,但是为什么=IF()函数要求您传递逗号,即使最后两个参数是可选的 =IF(logical_test, [value_if_true], [value_if_false]) 为什么我们不能就这么叫它 =IF(TRUE) 获取TRUE(当逻辑_测试评估为TRUE时的默认返回值) 我们不得不称之为提供了两个逗号,即使参数丢失/为空 =IF(TRUE, ,) 在UDF中,当使用可选参数时,我们将不需要传递逗号(原始IF的更简单版本,此处不需要实现错误处理) 当从电子表格
=IF()
函数要求您传递逗号,即使最后两个参数是可选的
=IF(logical_test, [value_if_true], [value_if_false])
为什么我们不能就这么叫它
=IF(TRUE)
获取TRUE
(当逻辑_测试评估为TRUE时的默认返回值)
我们不得不称之为提供了两个逗号,即使参数丢失/为空
=IF(TRUE, ,)
在UDF中,当使用可选参数时,我们将不需要传递逗号(原始IF的更简单版本,此处不需要实现错误处理) 当从电子表格调用时,我们可以省略逗号
=MYIF(TRUE)
任何人,除了斯波尔斯基;),是否知道在使用本机=IF()
时需要提供逗号的原因
我在Excel 2010中,但我刚刚注意到。。尽管如此,在2010年,函数定义显示第一个是必需的,最后两个是可选的。有什么解释吗
更新: 我知道
=1=1
和=and(TRUE,FALSE)
语法,我不是在寻找一种替代=IF()
的速记版本。相反,我要问的是
既然最后两个参数是可选参数,为什么逗号需要与原始的=IF()
一起提供?对于Excel函数,“可选参数”显然有两种不同的含义:
的文档,如果:
IF(逻辑测试、[value\u IF\u true]、[value\u IF\u false])
[……]
value\u if\u false
可选。[……]
如果logical\u test
的计算结果为FALSE
并且忽略value\u If\u FALSE
参数[…],则If
函数返回逻辑值FALSE
如果logical_test
的计算结果为FALSE
,并且忽略value\u If\u FALSE
参数的值[…],则If
函数返回值0(零)
好的,两个都可以。因此,=IF(FALSE,)
(参数省略)返回FALSE
,而=IF(FALSE,)
(参数省略)返回0
但是对于value_if_true
参数,根据文档,仅允许选项2。没有完全忽略这一论点的规定;仅支持忽略其值。因此,=IF(TRUE,)
和=IF(TRUE,,)
(参数在那里但省略了值)都返回0,而=IF(TRUE)
(参数完全省略)不受支持,因此无法编译
以上描述了记录和支持的行为。当然,这并不能回答“为什么”这样一个更深层次的问题。我的答案是,我不知道。我相信Excel的制作者们有一个很好的理由,或者至少他们认为他们有一个很好的理由
至于自定义项,它们是用VBA编写的,它们的可选
参数由VBA的规则控制,这些规则是不同的。在VBA函数中不存在省略参数“value of”的情况。“我们必须使用两个逗号来调用它”,当然也不一定。一个逗号也是可以接受的:=IF(TRUE)
@Jean-francoiscorbett-heh-nice从来不知道你的答案是什么Jean-Francois。现在我明白了,重点是Excel函数和VBA之间可选参数的不同含义。正如您所注意到的,只有Excel的开发人员才能真正解释为什么会这样,但我对您的回答非常满意,做得好!真正让我困惑的是Excel一开始就说了IF(逻辑测试,[value\u IF\u true],[value\u IF\u false])
,这让我认为两个参数都是可选的,但实际上第二个参数至少是以存在的形式需要的,即使它不可能有值。
=MYIF(TRUE)