#值! excel VBA中工作表function错误

我正在写一个代码来find等式的一个固定点:

1 / N = xf(x)/(1-F(x)),

其中x = p(1 + phi),f和F是伽马分布的pdf和cdf,N是正整数。

已知右边的伽马分布的x增加,所以必须有唯一的解决scheme。

我写了这个函数:

Function find_pdstar_gamma(alpha As Double, beta As Double, phi As Double, N As Integer) As Double Dim plow As Double Dim pmid As Double Dim ptop As Double Dim parg As Double Dim f As Double Dim Fbar As Double Dim z As Double plow = 0 ptop = 1000 Do pmid = (ptop + plow) / 2 parg = (1 + phi) * pmid f = WorksheetFunction.GammaDist(parg, alpha, beta, False) Fbar = (1 - WorksheetFunction.GammaDist(parg, alpha, beta, True)) z = parg * f / Fbar - 1 / N If z > 0 Then ptop = pmid Else plow = pmid End If Loop Until ((ptop - plow) / ptop) < 1e-08 find_pdstar_gamma = (ptop + plow) / 2 End Function 

我得到一个#value! 我运行该函数时出错。 任何想法,我的错误是?

我猜你得到了运行时错误6(溢出)或运行时错误11(除以0)。 这实际上可能是误导性的,因为它实际上是一个除零的涉及一个Double可以被报告为溢出。

首先要做的是检查以确保您的运算符优先级对于这一行代码是正确的:

 z = parg * f / Fbar - 1 / N 

这被评估为

 z = ((parg * f) / Fbar) - (1 / N) 

这意味着如果Fbar是零(或者是一个足够小的双倍),那么你会在这里得到一个错误。

第二件事是validation你的input或添加一个error handling程序。 这样你就可以得到一个更有意义的指示,指出什么是错的。

我会回答这个问题:“任何想法,我的错误是? 我真的没有世俗的想法,但我知道如何缩小它的范围。 在提到#value错误 – 似乎你正在使用它作为工作表函数。 这可能是预期的应用程序,但它使debugging变得困难。 相反 – 在即时窗口中运行它。 在VBEtypes的东西

 ?find_pdstar_gamma(1, 3, 0.5, 100) 

(但是用alpha,beta等这些值给你悲伤)。 当你这样做 – 计算将停止与突出显示的违规行(如果你点击错误msgbox中的debuggingbutton)。 这告诉你错误在哪里