使用用户定义的Mean和StdDev生成随机数

时间:2015-09-25 02:42:52

标签: excel vba excel-vba random

我试图生成正态分布的随机变量。 我有一个用户输入变量总数(M),随机变量集(N)的数量。我使用公式=NORM.INV(RAND(),0,1),它工作正常。 但是,当我想要一个用户输入Mean和StdDev时,我为每个输入声明一个变量。由I变量引用的单元格表示0表示Mean,1表示StdDev。 代码将运行,但随机变量的输出是好的#NAME?

我不明白为什么只要在工作表上输入公式就可以引用一个单元格,但是在VBA中却没有?

代码是:

Sub RandomNorm()

Dim WS_W As Worksheet: Set WS_W = ActiveWorkbook.Worksheets("Working") ' Sheet for calculations
Dim WS_Rand As Worksheet: Set WS_Rand = ActiveWorkbook.Worksheets("Random Generated") ' Sheet for random variable generation

Application.ScreenUpdating = False

Dim N As Long: N = WS_W.Range("B3").Value ' Number of random variable sets
Dim M As Long: M = WS_W.Range("C3").Value ' Number of simulations

WS_W.Select

Dim Mean As Double: Mean = WS_W.Cells(3, 4).Value ' Mean of Normal distribution
Dim StdDev As Double: StdDev = WS_W.Cells(3, 5).Value ' Standard Deviation of normal distribution

Dim i As Long
Dim j As Long

WS_Rand.Select
WS_Rand.Cells.Select
Selection.ClearContents ' Prepare for generation by clearing Generation sheet

For i = 1 To N
    For j = 1 To M
        WS_Rand.Cells(j, i).Select
        ActiveCell.FormulaR1C1 = "=NORM.INV(RAND(),Mean,StdDev)"
    Next
Next
End Sub

1 个答案:

答案 0 :(得分:1)

Excel工作表公式计算引擎对您的VBA变量一无所知。

您正在为单元格分配公式并尝试在公式中使用VBA中的变量。由于Excel无法识别每个变量名称的文字文本,因此会产生#NAME?错误。

修复方法是用它们的值替换变量名:

ActiveCell = "=NORM.INV(RAND()," & Mean & "," & StdDev & ")"

作为旁注......您可以一次性将公式分配给整个单元格范围,而不是逐个循环分配单元格,并且不需要选择任何内容来分配公式。