我有一个“黑盒”excel模型与1个工作表。它有两个输入,分别命名为range "Input1“和"Input2",以及一个output,这是一个命名range "Output”。我写了一个宏来测试这个模型对输入变化的敏感性,但我想知道是否有更好的方法来做到这一点:
Sub LoopMacro()
Dim outrow As Integer
outrow = 1
For i = 1 To 10 Step 0.5
Range("Input1").Value = i
For j = 1 To 10 Step 0.5
Range("Input2").Value = j
Output outrow
outrow = outrow + 1
Next j
Next i
End Sub
Sub Output(outrow As Integer)
Sheets("Output").Cells(outrow, 1) = Range("Input1").Value
Sheets("Output").Cells(outrow, 2) = Range("Input2").Value
Sheets("Output").Cells(outrow, 3) = Range("Output").Value
End Sub
这个宏的问题是,它需要每个输入变量都有一个for循环,如果我有多个输入变量,就会变得相当单调乏味。我正在尝试弄清楚是否有一种方法可以对此进行编码,这样我就可以定义n
输入(命名为ranged "Input1","Input1",到"Inputn"),以及它们的最小值和最大值,并让宏自动遍历Input1-Inputn的相关值
发布于 2011-10-04 08:45:12
不确定,但这可能是您正在寻找的:只需修改包含参数名称和值范围的数组。
Sub TestModelInputs()
Dim shtModel As Worksheet, shtResults As Worksheet
Dim arrNames, arrMin, arrMax, arrStep, arrVals, x
Dim rw As Long, lb, ub, n, incr As Boolean
'###modify input parameters here
arrNames = Array("Input1", "Input2", "Input3")
arrMin = Array(1, 1, 1)
arrMax = Array(4, 5, 6)
arrStep = Array(1, 1, 1)
'###done with parameter setup
Set shtModel = ThisWorkbook.Sheets("Model")
Set shtResults = ThisWorkbook.Sheets("Results")
rw = 1
arrVals = arrMin
lb = LBound(arrNames)
ub = UBound(arrNames)
n = (ub - lb) + 1
shtResults.UsedRange.ClearContents
Do
rw = rw + 1
For x = lb To ub
shtModel.Range(arrNames(x)).Value = arrVals(x)
Next x
With shtResults.Rows(rw)
.Cells(1).Resize(1, n).Value = arrVals
.Cells(n + 1).Value = shtModel.Range("Output").Value
End With
For x = lb To ub
If arrVals(x) < arrMax(x) Then
arrVals(x) = arrVals(x) + arrStep(x)
Exit For
Else
If x = ub Then
Exit Do
Else
arrVals(x) = arrMin(x)
End If
End If
Next x
Loop
End Sub
https://stackoverflow.com/questions/7640071
复制相似问题