WorksheetFunction.Norm_S_Inv()的问题

问题描述 投票:0回答:1

我试图对蒙特卡罗进行5000次试验的模型化。我似乎有一个奇怪的问题

g = WorksheetFunction.Norm_S_Inv(Rnd())

在循环(5000次试验)的运行期间,首先它正在工作,但随后出现错误信息:

Run-time error "1004": Method 'Norm_S_Inv' of object 'WorksheetFunction' failed

我检查了很多VBA网站,但我似乎找不到解决方案。我也测试过

  • Application.WorksheetFunction.Norm_S_Inv(Rnd())
  • WorksheetFunction.Norm_S_Inv(Rnd())
  • WorksheetFunction.Norm.S.Inv
  • Application.WorksheetFunction.Norm.S.Inv(Rnd())
  • WorksheetFunction.NormSInv

先感谢您,

vba worksheet-function inverse
1个回答
0
投票

它发生在你的Rnd()返回01的值时,这当然是Rnd()函数的可接受值,但它不是Norm_S_Inv()的输入。

我可以在我的计算机上轻松复制(我的Excel是意大利语,实际上我得到了1004代码,但我身边的文字却说“找不到类WorksheetFunction的属性Norm_S_Inv):

g = WorksheetFunction.Norm_S_Inv(0.14)
Debug.Print g
>>> -1.08031934081496

g = WorksheetFunction.Norm_S_Inv(0) 'or g = WorksheetFunction.Norm_S_Inv(1)
>>> 

enter image description here

为了避免这种情况,请确保不要将01作为函数的输入:

myRand = Rnd()
Do Until (myRand <> 0 And myRand <> 1)
    myRand = Rnd()
Loop
g = WorksheetFunction.Norm_S_Inv(myRand) 

个人注意:对于这个函数来说,这似乎是一个非常糟糕的错误处理,错误信息根本不清楚,我理解你找到根本原因的挫折感。

© www.soinside.com 2019 - 2024. All rights reserved.