定义返回空白的自定义 VBA 函数

Posted

技术标签:

【中文标题】定义返回空白的自定义 VBA 函数【英文标题】:Define a custom VBA function that returns blank 【发布时间】:2019-02-14 16:04:08 【问题描述】:

如果公式的结果为空白,如何定义一个返回空白的excel函数?

如果 vlookup 发现空白,则返回零。我想将 vlookup 嵌入一个函数中,如果 vlookup 找到一个空白单元格,则返回一个空白而不是零。

我不想输入:

=if(vlookup(args) = "", "", vlookup(args))

我希望有类似于内置 Iferror 函数的东西,其语法是:

=blankreturn(function)

如果函数结果为空白,则返回空白,否则返回函数的结果。

我试图定义一个自定义函数,但是当它找到一个空白单元格时它仍然返回零

public Function Blankreturn(formula as variant)

If IsEmpty(formula) = True Then
   Blankreturn = ""
Else
   Blankreturn = formula
End if

End Function

甚至更好,虽然我不知道从哪里开始编写代码:

ifblank(function, "This is blank")

如果第一个参数为空白,则返回第二个参数。

谢谢

【问题讨论】:

如果传递一个空单元格作为参数,该函数不返回 0,它返回 ""。 您是否特别想要VLOOKUP这个? @Rory 如果索引列为空,则返回 0 如果您将 VLOOKUP 公式传递给该 UDF,那么是的,它将返回 0,因为 VLOOKUP 将 0 传递给它。如果 VLOOKUP 结果应该是文本,只需使用=VLOOKUP(args)&"" @Rory 请注意,=VLOOKUP(args)&"" 也会将任何数字/日期等转换为字符串。 【参考方案1】:

您可以构建您的特殊 VLookup 函数

Option Explicit

Public Function MyVLookup(Arg1, Arg2, Arg3, Optional Arg4 = True)
    MyVLookup = Application.VLookup(Arg1, Arg2, Arg3, Arg4)
    If VarType(MyVLookup) = 0 Then MyVLookup = vbNullString
End Function

但可能使用 VBA 用户定义函数比使用这种方法要慢 =if(vlookup(args) = "", "", vlookup(args)) 我可以想象(需要测试)。

【讨论】:

以上是关于定义返回空白的自定义 VBA 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 VBA 函数返回自定义类型

nodejs中的自定义mysql函数返回未定义

FORTRAN自定义函数返回值

Access 中的自定义函数返回类型转换错误

如何在 onlyoffice 中创建用于 .xlsx 的自定义函数

使用VBA代码实现简单自定义函数