首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“压力测试”Excel模型的框架

“压力测试”Excel模型的框架
EN

Stack Overflow用户
提问于 2011-10-04 04:03:44
回答 1查看 1.7K关注 0票数 1

我有一个“黑盒”excel模型与1个工作表。它有两个输入,分别命名为range "Input1“和"Input2",以及一个output,这是一个命名range "Output”。我写了一个宏来测试这个模型对输入变化的敏感性,但我想知道是否有更好的方法来做到这一点:

代码语言:javascript
运行
复制
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的相关值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-04 08:45:12

不确定,但这可能是您正在寻找的:只需修改包含参数名称和值范围的数组。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7640071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档