Excel VBA:不满足条件时如何让UDF返回0

Posted

技术标签:

【中文标题】Excel VBA:不满足条件时如何让UDF返回0【英文标题】:Excel VBA: How to get UDF to return 0 when conditions aren't met 【发布时间】:2021-03-05 08:46:27 【问题描述】:

我一直在寻找一个简单的 UDF,我可以使用它来仅从单元格中的任何位置提取数字,即使它包含小数。好消息是,我不会要求任何人为我写一篇,因为我已经找到了 99% 的篇幅。

第一个函数 GetNumeric 在返回值时将忽略小数。如,如果引用的单元格包含“7.75天”,它将返回“775”但是,如果引用的单元格没有任何数字,例如“狗”,它将返回“0”

第二个函数 GetNum 解决了小数问题,并返回“7.75”,但现在如果引用的单元格没有任何数字,它将返回错误。

Function GetNumeric(CellRef As String)
    Dim StringLength As Integer
    StringLength = Len(CellRef)
    For i = 1 To StringLength
        If IsNumeric(Mid(CellRef, i, 1)) Then result = result & Mid(CellRef, i, 1)
    Next i
    GetNumeric = result
End Function

Function GetNum(ByVal InString) As String
    Dim x As Integer
    For x = 1 To Len(InString)
        If Mid(InString, x, 1) Like "[!0-9.() ]" Then Mid(InString, x, 1) = Chr$(1)
    Next
    GetNum = Trim(Replace(InString, Chr$(1), ""))
End Function

我想我可以将“Like”部分放在第一个函数中,但它总是返回 0。这是为什么呢?

【问题讨论】:

if the referenced cell does not have any numbers it will return an error. 我已经缩进了你的代码。我试过你的代码。它按预期工作,不会给我任何错误。我唯一注意到的是,如果单元格有1.5blah.1blah.5 ,第二个函数会给你 11.5.1.51。如果这与您预期的一样,那么我认为没有问题。 我想了解您的主要目标是什么?也许有更好的方法来实现这一点? 如果单元格中没有数字,第二个函数将不会返回值。它将返回一个空单元格,但我希望它返回一个 0,就像第一个函数一样。我在我的电子表格中到处使用它,这只是太阳能系统的成本和能量分析。主要目的是让我可以将所有结果与该结果的单元放在同一个单元格中,例如“多晶硅,500 Wh”或“41.4 小时”。但我也参考下拉菜单,其中“无”值需要被视为零。真的只是一种生活质量功能。 【参考方案1】:

如果单元格中没有数字,第二个函数将不会返回值。它会返回一个空单元格,但我希望它返回一个 0,就像第一个函数一样。

这是你正在尝试的吗?

最后检查返回值是否为空。如果它是空的,则将0 传递给它。

Function GetNum(ByVal InString) As String
    Dim x As Integer
    Dim Ret As String
    
    For x = 1 To Len(InString)
        If Mid(InString, x, 1) Like "[!0-9.() ]" Then Mid(InString, x, 1) = Chr$(1)
    Next
    Ret = Trim(Replace(InString, Chr$(1), ""))
    
    If Len(Trim(Ret)) = 0 Then GetNum = 0 Else GetNum = Ret
End Function

【讨论】:

以上是关于Excel VBA:不满足条件时如何让UDF返回0的主要内容,如果未能解决你的问题,请参考以下文章

excel文件打开时 vba满足条件弹窗提醒?

从 Excel 与 VBA 调用时,VBA UDF 给出不同的答案

Excel VBA - 条件格式中的用户定义函数

excel,如筛选一样满足一个条件,返回所有数据

如何在 VBA Excel UDF 参数中使用比较运算符?

Excel VBA - 确定数组 UDF 的列或行目标