在函数中使用IsNumeric

时间:2019-06-21 16:53:08

标签: excel vba excel-formula isnumeric

我写了一个函数,该函数根据输入单元格生成一个“分数”(1,0,-1),该单元格应包含一个数字。但是,有时输入字段可能不是数字,然后函数应返回输出“ 0”。

Function ScoreRoE(RoE_Field As Range, goodval As Range, badval As Range)

    Dim RoE As Double, result As Double

    RoE = RoE_Field.Value

        If IsNumeric(RoE_Field.Value) = False Then
            result = "0"
        Else:
            If RoE >= goodval.Value Then
                result = "1"
            ElseIf RoE <= badval.Value Then
                result = "-1"
            Else:
                result = "0"
            End If
        End If

    ScoreRoE = result

End Function

当输入单元格为数字时,该功能将正常工作。但是,如果不是这样,它只会返回错误“ #VALUE!”

非常感谢!

2 个答案:

答案 0 :(得分:4)

将RoE声明为变体:

Function ScoreRoE(RoE_Field As Range, goodval As Range, badval As Range)

    Dim RoE As Variant, result As Double

    RoE = RoE_Field.Value

        If Not IsNumeric(RoE) Then
            result = 0
        Else
            If RoE >= goodval.Value Then
                result = 1
            ElseIf RoE <= badval.Value Then
                result = -1
            Else
                result = 0
            End If
        End If

    ScoreRoE = result

End Function

您不能将文本值分配给double。


我个人认为不需要任何变量:

Function ScoreRoE(RoE_Field As Range, goodval As Range, badval As Range)

    If Not IsNumeric(RoE_Field.Value) Then
        ScoreRoE = 0
    Else
        If RoE_Field.Value >= goodval.Value Then
            ScoreRoE = 1
        ElseIf RoE_Field.Value <= badval.Value Then
            ScoreRoE = -1
        Else
            ScoreRoE = 0
        End If
    End If

End Function

答案 1 :(得分:2)

这是对代码意图的解释:

Function ScoreRoe(roeInput As String, goodVal As String, badVal As String) As String

    If Not IsNumeric(roeInput) Or Not IsNumeric(goodVal) Or Not IsNumeric(badVal) Then
        ScoreRoe = "0"
    Else
        Dim goodValNumeric As Double: goodValNumeric = goodVal
        Dim badValNumeric As Double: badValNumeric = badVal
        Dim roeInputNumeric As Double: roeInputNumeric = roeInput

        If roeInputNumeric >= goodValNumeric Then
            ScoreRoe = "1"
        ElseIf roeInputNumeric <= badValNumeric Then
            ScoreRoe = "-1"
        Else
            ScoreRoe = "0"
        End If
    End If

End Function

主要思想是将输入作为String,然后转换为Double进行比较。然后,如果输入不是数字,则返回值为0,如果是,则通过If-Else。

通常,最好避免在VBA :中使用If-Else,以避免此类不必要的问题-VBA - How the colon `:` works in VBA code with condition

相关问题