从用户定义的函数返回Empty实际返回0

时间:2014-11-28 22:08:22

标签: excel excel-vba excel-formula string vba

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

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

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

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表格如下:

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:3)

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

“”与 Empty 不同,并且在许多情况下它们的行为有所不同。可以通过在立即窗口中执行下面的行,在选定的空单元格和包含“”

的单元格上获得差异的表现形式。
? TypeName(Selection.Value)

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

仍然在MS的待办事项列表中(或许不是......)

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

Return empty cell from formula in Excel

答案 1 :(得分:2)

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

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