我写了一个函数,该函数根据输入单元格生成一个“分数”(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!”
非常感谢!
答案 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