Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 为什么带有可选参数的工作表IF()函数的语法与UDF不同?_Vba_Excel_If Statement_Worksheet Function - Fatal编程技术网

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函数,“可选参数”显然有两种不同的含义:

  • 可选参数可以省略

  • 可选参数的值可以省略

  • 有时两者都允许,有时只允许2

    查看
    的文档,如果

    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)