“压力testing”Excel模型的框架

我有一个“黑匣子”Excel模型与1张。 它有两个input,命名范围为“input1”和“input2”,以及一个输出,命名范围为“输出”。 我写了一个macros来testing这个模型对inputvariables的敏感性,但是我想知道是否有更好的方法来做到这一点:

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 

这个macros的问题是每个inputvariables都需要一个for循环,如果我有更多的input,会变得非常单调乏味。 我试图找出是否有一种方法来编码,这样我就可以定义ninput(名为ranged“Input1”,“Input1”,“Inputn”),以及它们的最小和最大值,并有macros自动循环Input1-Inputn的相关值

不知道,但这可能是你要找的东西:只要修改包含参数名称和值范围的数组。

 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