Vba 使用用户定义的平均值和STDEV生成随机数

Vba 使用用户定义的平均值和STDEV生成随机数,vba,excel,random,Vba,Excel,Random,我试图生成正态分布的随机变量。 我有一个用户输入的变量总数(M),随机变量集的数量(N)。我使用的公式是=NORM.INV(RAND(),0,1),它工作得很好。 然而,当我想要有一个用户输入的Mean和StdDev时,我为每一个都声明了一个变量。我输入的变量引用的单元格表示平均值为0,StdDev为1。 代码将运行,但是随机变量的输出是良好的旧#NAME? 我不明白,如果只是在工作表上输入公式,为什么引用单元格有效,但在VBA中却不行 代码是: Sub RandomNorm() Dim WS

我试图生成正态分布的随机变量。 我有一个用户输入的变量总数(M),随机变量集的数量(N)。我使用的公式是
=NORM.INV(RAND(),0,1)
,它工作得很好。 然而,当我想要有一个用户输入的Mean和StdDev时,我为每一个都声明了一个变量。我输入的变量引用的单元格表示平均值为0,StdDev为1。 代码将运行,但是随机变量的输出是良好的旧
#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

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

将公式指定给单元格,并尝试在公式中使用VBA中的变量。由于Excel无法识别每个变量名称的文本,因此会产生一个#名称?错误

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

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

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

AHHH。你在.ActiveCell.FormulaR1C1=“=NORM.INV(RAND(),”&Mean&“,”&StdDev&“)上找到了点,谢谢你,伙计。将此标记为已回答。