WorksheetFunction.Norm_S_Inv()出现问题

时间:2019-03-31 14:30:23

标签: vba worksheet-function inverse

我正在尝试对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

先谢谢您

1 个答案:

答案 0 :(得分: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) 

个人笔记::对于此功能,这似乎是一个非常糟糕的错误处理,错误消息一点也不清晰,我理解您对于找到根本原因的无奈。