Рамки для «стресс-тестирования» Модели Excel

У меня есть модель «черного ящика» с 1 листом. Он имеет 2 входа, которые называются диапазонами «Input1» и «Input2», и один выход, который является именованным диапазоном «Выход». Я написал макрос, чтобы проверить чувствительность этой модели на вариации ее входов, но мне было интересно, был ли более элегантный способ сделать это:

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 входов (названных по умолчанию «Input1», «Input1», «Inputn») вместе с их минимальными и максимальными значениями и иметь макрос автоматически перебирать соответствующие значения 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 
Interesting Posts

Вернитесь к первой строке

Что такое невидимый лист с именем «D% $ & 01_DevSheet» в книге Excel OOXML?

VBA: Как найти отдел и заменить его другим отделом?

EXCEL: изменение дат, которые происходят в диапазоне от нескольких месяцев до последнего месяца диапазона

Отображение листа Excel в android

Как суммировать данные, относящиеся к отдельным значениям в сводной таблице

Перекрестное обновление нескольких книг Excel, одновременно сохраняя один главный файл

Поиск Excel и сопоставление двух ячеек в одной строке для нескольких строк

Как я могу получить форматирование ячейки при запросе через LinqToExcel

excel question – как сделать формулу для% variance

Код Excel VBA работает очень медленно даже при отключенных событиях

USE R для создания диаграммы в Excel

перемещать дублированные значения в новые листы

Как удалить фамилию из пути в VBA

Требования к API JavaScript для JavaScript 1,8 события

Давайте будем гением компьютера.