Нужна помощь? Зацикливание Excel Solver на X раз и размещение подробностей на новой вкладке - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю фэнтезийный спортивный оптимизатор, используя EXCEL SOLVER.Это прекрасно работает, выплевывая 1 единый состав.Я хочу обновить этот файл, чтобы пользователь выбирал число, скажем, от 1 до 50, а затем просматривал его и создавал такое количество строк.

Это код, который у меня сейчас есть:

Sub OptoRun()
' OptoRun Macro
    SolverOk SetCell:="$AC$1", MaxMinVal:=1, ValueOf:=0, ByChange:="$Q$2:$Q$200", _
        Engine:=2, EngineDesc:="Simplex LP"
    SolverOk SetCell:="$AC$1", MaxMinVal:=1, ValueOf:=0, ByChange:="$Q$2:$Q$200", _
        Engine:=2, EngineDesc:="Simplex LP"
    SolverSolve UserFinish:=True
    Range("priorProjPts").Value = Range("totProjPts").Value - 0.01
End Sub

Добавление в формулу Range в конце позволяет пользователю снова нажать кнопку «Оптимизировать», и он перейдет к следующемунаивысший состав и т. д., и т. д. Я хочу, чтобы это расставило списки на другой странице по # выбору.Так, например, пользователь выберет 10 составов и нажмет на «оптимизировать», и это даст 10 составов.

1 Ответ

0 голосов
/ 05 февраля 2019

Вот некоторые рекомендации, так как я не очень знаком с плагином SOLVER.Я также даже не знаком с вашей книгой Excel.

Этот макрос поможет вам начать работу.Вам нужно изменить этот код.Если вы запустите это как есть, это НЕ БУДЕТ МНОГО.

Sub OptoRun()
    Dim currentPoint as Long

    NumberOfLoops = InputBox("How Many Lineups?")
    If NOT IsNumeric(NumberOfLoops) Then NumberOfLoops = 1

    currentPoint = 1

    Do until currentPoint > NumberOfLoops
        'Insert a modified version of your code here

        'use the (currentPoint) variable for the current position within the loop
        'Example: ActiveSheet.Cells(CurrentPoint, 1).Value = ActiveSheet.Cells(CurrentPoint, 1).Address

        currentPoint = currentPoint + 1
    Loop

End Sub

Я разместил комментарий выше о том, куда вы будете вставлять ваш измененный код.Чтобы определить текущую позицию, вы будете использовать переменную CurrentPoint

. Эта переменная будет возвращать текущее число в цикле и может использоваться как уникальная позиция.

Например, выможно использовать что-то вроде этого ...

ActiveSheet.Cells(CurrentPoint, 1).Value = ActiveSheet.Cells(CurrentPoint, 1).Address

Выше будет просто сделать что-нибудь между строкой 1, столбцом 1 ($ A $ 1) для любого входного значения (то есть, если 100 являетсявведите $ A $ 100), равный адресу.(т. е. если вход 100, то все между A1 и A100 будет равно адресу ячейки)

Теперь, похоже, что вы используете свойство Range, вы можете достичь того же результата, переключившиськ свойству Cells, но вы не сможете использовать «Friendly Names».

...