首页 > 解决方案 > WorksheetFunction.Norm_S_Inv() 的问题

问题描述

我正在尝试为 5000 次试验建立蒙特卡洛模型。我似乎有一个奇怪的问题

g = WorksheetFunction.Norm_S_Inv(Rnd())

在循环运行期间(5000 次试验),起初它正在工作,但随后出现错误消息:

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

我检查了许多 VBA 站点,但似乎没有找到解决方案。我也测试过

先感谢您,

标签: vbaworksheet-functioninverse

解决方案


当您Rnd()返回0or的值时会发生这种情况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)
>>> 

在此处输入图像描述

为了避免这种情况,请确保您没有获取01作为函数的输入:

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

个人说明:这似乎是为此功能进行的非常糟糕的错误处理,错误消息根本不清楚,我理解您在找到根本原因时的挫败感。


推荐阅读