【问题标题】:Random number generator in VBA using Analysis Toolpack-VBA使用 Analysis Toolpak-VBA 在 VBA 中生成随机数
【发布时间】:2016-01-06 01:45:38
【问题描述】:

我使用下面这行来生成泊松随机数:

Application.Run("Random", "", 1, 100, 5, , 34) 

这会在 Excel 工作表中生成 100 个带有 Lambda (34) 的随机数。我想将输出保存到变量而不是工作表中。我试过了

X=Application.Run("Random", "", 1, NSim, 5, , 34)

我没有收到任何错误,但“X”中没有保存任何内容。您能帮我如何将结果保存在变量中吗? 谢谢

【问题讨论】:

  • 请使用格式

标签: excel random generator vba


【解决方案1】:

似乎该函数返回一个布尔值而不是一个数字数组,并且只接受一个范围作为其参数之一的输出。

【讨论】:

    【解决方案2】:

    看起来Random 是一个子例程,除非您可以访问底层代码,否则您无法直接执行此操作。

    你可以做的(虽然相当倒退)是让子运行,然后将结果分配回一个变量并将其从工作表中删除:

    Sub MM()
        Dim generateNumbers As Integer, results As Variant
        generateNumbers = 100 '// numbers to generate
    
        Application.Run("Random", "", 1, generateNumbers, 5, , 34)
    
        results = WorksheetFunction.Transpose(Range("A1:A" & generateNumbers))
        Range("A1:A" & generateNumbers).ClearContents '// If required
    End Sub
    

    变量results 现在将是一个结果数组。

    【讨论】:

      【解决方案3】:

      怎么样:

      Sub MAIN()
         Dim x(1 To 100) As Variant
         Dim Lambda As Double
         Lambda = 34
      
         For I = 1 To 100
            x(I) = Poisson(Lambda)
         Next I
      
      End Sub
      
      
      Public Function Poisson(L As Double) As Long
         Dim I As Long, x As Double, expL As Double
      
         expL = Exp(-L)
         I = 0
         x = 1
         While x > expL
            I = I + 1
            x = x * Rnd()
         Wend
         Poisson = I - 1
      End Function
      

      虽然有毒,但没有毒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多