excel自定义函数出错,求高手看看是哪里的问题

Function ling(table, s1, s2)
s = s1
ling = ""
While s < s2
If PL(table, s) = 0 Then
ling = s
Else
ling = ling
End If
s = s + 0.2
Wend
If ling = "" Then
ling = "在指定区间内不存在盈亏平衡点"
Else
ling = "在制定区间内的盈亏平衡点有" & ling
End If
End Function
=========================
是一个用来算策略组合盈亏平衡点的,s是标的价格,原估计是从s1累加到s2,看看哪个值能满足盈亏为0.
问题在步长,如果用s=s+1或者s=s+0.5是可以找出这给点,但如果步长再变小就不行了。例如改成0.2,,01就会显示不存在平衡点。但理论上来说步长0.1是不可能恰好跳过平衡点的。所以不知道是不是while语句或者if语句有什么特殊限定。
注:其中用到的PL函数是没有问题的,可以正确算出各情况的值

第1个回答  2014-06-11
你这个迭代有点牵强,建议你用牛顿或者二分法 ;另外以精度来看 你的步长给到0.2 而你的循环条件是自定义函数为0.这在很多迭代里是不允许这样的 ,它会导致两种情况 一种是跳出循环,一种是死循环。具体什么情况看你的循环语句。所以建议你不要让循环终止条件自定义函数=0 可以让他=0.000001 等等。追问

我的PL函数有多个零点,不能用二分法,而且不可导,用不了牛顿法。我本来的程序是希望把所有零点用&串在一起,但现在出错了就先简化一下,看看问题出在哪里。
我的循环继续条件是s < s2,希望让s历遍s1到s2的点。我这样写难道不对?

追答

这样 你把S=S+0.2这条语句放在End if之前 ling=ling之后 ,然后再ling=s 与ELSE之间 加入条语句GOto 10 , 然后在If ling = "" Then 语句之前打10 然后空格