EXCEL中的VBA问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 23:46:52
一个自定义函数:
Function 位数(x) As Double
if x<1 then 位数 = Round(x, 3)
elseif x<10 位数 = Round(x, 2)
else 位数 = Round(x, 1)
endif
End Function
也就是说某个数在小于1的时候,给保留三位小数,在小于10的时候,是两位,小于100是1位.这么个自定义函数.可是实际上对给出的数不执行分支判断,这代码错在哪啊,哪位达人赐教啊?

Function 位数(x) As Double
If x < 1 Then
位数 = Round(x, 3)
ElseIf x < 10 Then
位数 = Round(x, 2)
Else: 位数 = Round(x, 1)
End If
End Function

因为你的两个条件是并列且有重复的,所以当x只要大于10,比如100.654时,它首先满足第1个条件,所以结果为100,但由于是并列的,所以它会接着执行第2句,而100.654同样满足>10的条件,所以结果又变成了100.7。
要解决这个问题,应该要把条件重新划分,满足了第一个条件后就应该跳过不要执行后面的语句。
所以,修改如下:
Function 位数(x) As Double
If x >= 100 Then 位数 = Round(x, 0)
If x >= 10 And x < 100 Then 位数 = Round(x, 1)
If x < 10 Then 位数 = Round(x, 2)
End Function

if语法错误,算法没错。
一楼就行了

else if 后面少了THEN