我正在尝试对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
先谢谢您
答案 0 :(得分:0)
当您的Rnd()
返回值0
或1
时会发生,这当然是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)
>>>
为避免这种情况,请确保不要将0
或1
用作函数的输入:
myRand = Rnd()
Do Until (myRand <> 0 And myRand <> 1)
myRand = Rnd()
Loop
g = WorksheetFunction.Norm_S_Inv(myRand)
个人笔记::对于此功能,这似乎是一个非常糟糕的错误处理,错误消息一点也不清晰,我理解您对于找到根本原因的无奈。