到目前为止我的代码,第一部分,我在其中生成特定范围的随机数:
Dim i As Long
Randomize
For i = 1 To 20000
Range("A" & i) = Rnd()
Next i
Range("A1") = ("Rand")
ActiveCell.Range("A1:A20000").Select
Sheets("Sheet1").Columns("A").Copy
Sheets("Sheet1").Columns("B").PasteSpecial xlPasteValues
Sheets("Sheet1").Columns("A").Delete
Range("A1") = ("Rand")
MsgBox ("Nagenerovaných 20 000 hodnôt")
在第二部分中,我试图获得Gamma.Inv
:
Dim alfa As Integer
Dim beta As Integer
Dim a As Long
Range("I2").Value = InputBox("zadaj parameter alfa")
Range("J2").Value = InputBox("zadaj parameter beta")
Range("B2").Select
Range("I2").Value = alfa
Range("J2").Value = beta
For a = 1 To 20000
Range("B" & a) = WorksheetFunction.Gamma_Inv(Rnd(), alfa, beta)
Next a
代码的第一部分工作正常,但制作这些随机数需要一段时间。有没有更有效的方法来做到这一点?
第二部分不起作用。我想要做的是使用我已经生成的随机数而不是伽玛函数中的Rnd()。我已经用rand()尝试了代码的第二部分,因为我想知道它是否会起作用。
PS:它是一个学校项目,代码的每个部分都是通过点击按钮启动的,如果你想知道为什么我把它分成两部分。
答案 0 :(得分:0)
对于第一部分,您可以这样做:
Dim rand_rng As Range
Set rand_rng = Range("A1:A20000")
rand_rng = "=Rand()"
rand_rng = rand_rng.Value2
Range("A1") = ("Rand")
MsgBox ("Nagenerovaných 20 000 hodnôt")
第二部分必须是这样的:
Dim g_range As Range
Set g_range = Range("B1:B20000")
Range("I2").Value = InputBox("zadaj parameter alfa")
Range("J2").Value = InputBox("zadaj parameter beta")
g_range.formula = "=Gamma.Inv(A1, $I$2, $J$2)"
N.B。获得定义的参数需要在左侧(即 alpha = Range("I2").Value
)
答案 1 :(得分:0)
一次设置它们可能会快一点:
[I2] = InputBox("zadaj parameter alfa")
[J2] = InputBox("zadaj parameter beta")
[A1:B20000] = [{"=RAND()", "=GAMMA.INV(A1, I$2, J$2)"}]