无法获取工作表函数类错误的gamma_inv属性

时间:2017-04-27 17:25:46

标签: vba performance excel-vba worksheet-function excel

到目前为止我的代码,第一部分,我在其中生成特定范围的随机数:

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:它是一个学校项目,代码的每个部分都是通过点击按钮启动的,如果你想知道为什么我把它分成两部分。

2 个答案:

答案 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)"}]