Excel VBA: копировать ячейки из итераций решателя и вставлять результаты в таблицу с VBA - PullRequest
0 голосов
/ 19 апреля 2020

У меня очень ограниченный опыт кодирования VBA, поэтому заранее извиняюсь за любую наивность. Я приложил свою таблицу Excel, чтобы вы могли видеть, о чем я говорю.

Для классного проекта мне дали серию из 15 проектов. Проекты имеют ряд доходов и доходов, но все они остаются постоянными, за исключением одного столбца. Я должен использовать решатель, чтобы найти наиболее ценную комбинацию этих проектов при минимизации затрат. Я понимаю, как это сделать. Но я должен использовать кодирование VBA, чтобы запустить список альтернативных значений через таблицу и выбрать лучшую группу проектов для каждого значения. Жизненное значение в O5 и значение травмы в O6 - вот что меняется. Для каждой решающей итерации мне нужно заменять эти значения на одно в списке (ячейки с N11 по O26) по одному. Кроме того, для каждого результата, который я go просматривал в списке, мне нужно создать еще одну таблицу, в которой будут записаны выбранные проекты. Так что для картины, которую я дал, мне нужно было бы записать F1, G, H и J1.

Мой вопрос: Как мне использовать VBA, чтобы l oop решить через таблицу переменных и записать результаты каждой итерации решателя в новую таблицу? Я думаю, что я бы использовал VBA для копирования содержимого ячеек с утвержденными проектами на основе результата двоичного решателя в столбце «Выбор», но я не уверен, как это сделать.

Любая помощь будет оценена, спасибо!

enter image description here Таблица Excel 1 : https://i.stack.imgur.com/8CCmX.png

1 Ответ

0 голосов
/ 21 апреля 2020

Я решил это самостоятельно. Я не знаю, поможет ли это кому-нибудь, но вот мой код.

Sub Sheet1()

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .DisplayStatusBar = False
End With


Dim i As Integer
Dim j As Integer
Dim k As Integer


For i = 12 To 26
'Enters Life Value for iteration
Range("O5").Value = Range("N" & i).Value

'Enters Injury Value for iteration
Range("O6").Value = Range("O" & i).Value

    'Solve Scenario with given Life and Injury Values
    SolverSolve UserFinish:=True

        'Sets up a table which collects all the chosen projects into one column
        'so they can be selected and put into a single cell as the result for the loop iteration
        For k = 5 To 21
            binary = Range("L" & k).Value

            'Enters Project Name if solver choses it
            If binary = 1 Then Range("T" & k) = Range("B" & k).Value
            'Returns cell to blank if project is not chosen
            If binary = 0 Then Range("T" & k) = Range("A" & k).Value

            Next

        'Copy the projects selected into a table of results
          Range("R25").Value = "=CONCAT(T5:T21)"
          Range("R25").Copy
          Range("W" & i).PasteSpecial xlPasteValues

        'Copy the Cost of each project selection iteration into table
          Range("P9").Copy
          Range("X" & i).PasteSpecial xlPasteValues

          'Copy the number of projects selected for each scenario
          Range("Y" & i).Value = Range("N9")


'Returns the choice column to all zeros in preparation for new loop
Range("L5:L21").Value = 0

Next

With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .DisplayStatusBar = True
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...