gpt4 book ai didi

excel - 在 VBA 中生成具有正态分布的随机数-运行时错误 ‘1004’

转载 作者:行者123 更新时间:2023-12-04 22:29:31 25 4
gpt4 key购买 nike

我在 VBA 中生成具有正态分布的随机数时遇到问题。
我正在研究 NSGAII。我使用“Application.WorksheetFunction.Norm_Inv (Rnd, Mean, Deviation)”来生成正态分布的随机数。
但我这个错误引发:

运行时错误“1004”:
无法获取工作表函数类的 Norm_Inv 属性


我该如何解决这个错误?

我已经在另一个简单的宏中使用了这段代码,它可以工作。但是在 NSGAII 代码中使用此代码会出现错误! (在 NSGAII 代码中定义和使用了大量变量(double、long、Boolean 等)和二维数组,它由一些 do while、for 等循环组成)

我在“Function GenerateNormRand() As Double”行使用了断点。当我中断并继续(逐步运行代码)时,没有任何错误!但是当我不这样做时,就会出现错误。

Option Explicit
Function Mutation () As Variant
.
.
.
Dim RandomNumber As Double
RandomNumber = GenerateNormRand ()
.
.
.
End Function

Function GenerateNormRand () as double
Dim myrand As Double
randomize
myrand = Application.WorksheetFunction.Norm_Inv(Rnd, 0, 5)
GenerateNormRand = myrand
End Function

即使在每个输入和输出变量上明确声明 Double 行 GenerateNormRand = Application.WorksheetFunction.Norm_Inv ... 也会引发运行时错误 1004:
Sub TestThisFunction()
MsgBox GenerateNormRand
End Sub

Function GenerateNormRand() As Double
Randomize
GenerateNormRand = Application.WorksheetFunction.Norm_Inv( _
CDbl(Rnd), CDbl(0), CDbl(5))
End Function

最佳答案

您的问题描述似乎很神秘,但如果您想绕过工作表功能,您可以使用 Box-Muller transform在纯 VBA 中生成您自己的正常随机变量:

Function RandNorm(Optional mean As Double = 0, Optional sd As Double = 1) As Double
Dim r1 As Double, r2 As Double, s As Double
r1 = Rnd()
If r1 = 0 Then r1 = Rnd() 'no danger of two zeros in a row in rnd()
r2 = Rnd()
s = Sqr(-2 * Log(r1)) * Cos(6.283185307 * r2) '6.28 etc. is 2*pi
RandNorm = mean + sd * s
End Function

关于excel - 在 VBA 中生成具有正态分布的随机数-运行时错误 ‘1004’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54382217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com