【问题标题】:Returning Empty from user defined function returns actually 0从用户定义的函数返回 Empty 实际上返回 0
【发布时间】:2015-01-27 13:50:19
【问题描述】:

我需要用用户函数的结果填充一个单元格。如果函数的结果不为零,则单元格应简单地用函数的结果填充;到目前为止一切顺利。

但如果结果为零,我希望单元格为空。

所以我写了这个用户定义函数:

Function MyTestFunction(n As Integer) As Integer
    Dim result As Integer

    result = n * 2

    If result = 0 Then
        MyTestFunction = Empty
    Else
        MyTestFunction = result
    End If
End Function

这个函数没有真正的目的,只是为了调查这个问题。

Excel工作表如下:

单元格 A1 到 A3 只是输入数据,单元格 B1 到 B3 包含:

  • B1:=MyTestFunction(A1)
  • B2:=MyTestFunction(A2)
  • B3:=MyTestFunction(A3)

现在为什么单元格 B3 显示 0 而不是空的?

【问题讨论】:

    标签: excel excel-formula string vba


    【解决方案1】:

    你已经定义你的函数总是返回一个整数,它确实如此。空值不是整数。您可以按如下方式修改您的功能:

    Function MyTestFunction(n As Integer) As Variant
        Dim result As Integer
    
        result = n * 2
    
        If result = 0 Then
            MyTestFunction = ""
        Else
            MyTestFunction = result
        End If
    End Function
    

    【讨论】:

    • 这行得通,但不幸的是,像这样返回的空单元格不能在某些公式中使用。例如,如果我将公式 =B2+B3 放入单元格 B4,我会得到一个错误而不是 4 (4+0)。另一方面,=SUM(B1:B3) 有效。
    • @MichaelWalz - 您的示例表明 Empty 的最佳替代品取决于结果的预期用途,请参阅this
    • @Michael Walz - 正如 sancho.s 正确指出的那样,您不能真正返回“空”值。如果结果为 0,我建议的函数的修改版本会返回一个空字符串。这会使单元格显示为空,而实际上它包含一个字符串。因此,当您尝试将整数添加到字符串 (=B2+B3) 时,您会收到错误消息。当您对一个范围 (=SUM(B1:B3)) 求和时,包含该字符串的单元格将被忽略,因此添加成功。解决此问题的方法是在添加单元格值时使用 IF 函数,如下所示:=IF(B2 = "",0,B2)+IF(B3 = "",0,B3).
    • @Zeno 谢谢。我得出了同样的结论。对于加法,我现在使用SUM,对于减法,我编写了一个用户定义的函数DIFF,它负责所需的转换。
    【解决方案2】:

    您不能从任何公式(使用内置或用户定义的函数)返回 Empty,请参阅 this

    "" 与 Empty 不同,它们在许多情况下的行为不同。可以通过在即时窗口中对选定的空单元格和包含“”的单元格执行下面的行来获得差异的体现

    ? TypeName(Selection.Value)
    

    作为公式结果的 Empty 最有用的替代品取决于您对包含该公式的单元格的使用,请参阅this 以了解它。

    还在 MS 的 ToDo 列表中(或者可能不在...)

    编辑: 我发现了以下相关问题(值得检查答案)

    Return empty cell from formula in Excel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多