我试图生成正态分布的随机变量。
我有一个用户输入变量总数(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
答案 0 :(得分:1)
Excel工作表公式计算引擎对您的VBA变量一无所知。
您正在为单元格分配公式并尝试在公式中使用VBA中的变量。由于Excel无法识别每个变量名称的文字文本,因此会产生#NAME?错误。
修复方法是用它们的值替换变量名:
ActiveCell = "=NORM.INV(RAND()," & Mean & "," & StdDev & ")"
作为旁注......您可以一次性将公式分配给整个单元格范围,而不是逐个循环分配单元格,并且不需要选择任何内容来分配公式。