2016-11-27 2 views
-1

У меня есть файл excel с 300 строками данных, и мне нужно использовать решатель в каждой строке. В каждой ячейке столбца K есть уравнение, которое должно равняться нулю, изменяя ячейку H9.Excel Solver с использованием макроса

Solver:

  • клетки-мишени: К9 (должен быть равен "0")
  • Изменяя ячейки: H9
  • Выход клеток: Н9

Решатель должен работать от строки 9 к строке 309.

Я могу найти много подобных проблем в Интернете, но я не могу изменить программную треску е к моему делу.

*Sub Macro2() 
' Macro2 Macro 
' 
Sneltoets: Ctrl+v 
' 
Dim c As Range 
Dim nRows As Integral 
nRows = 300 
For Each c In Range("$H$9:$H$309") 
     SolverOk SetCell:=c.Offset(0, 3), MaxMinVal:=3, ValueOf:=0, ByChange:=c.Address, _ 
      Engine:=1, EngineDesc:=" GRG Nonlinear " 
     SolverSolve userfinish:=True 
     SolverFinish keepfinal:=1 
Next 
End Sub* 

Его первый раз, когда я должен что-то программировать в Excel.

Если кто-то может мне помочь, я бы очень признателен!

+0

Можете ли вы показать код, который у вас есть до сих пор, даже если он не работает? И что означает значение «K9 для значения 0»? – NavkarJ

+0

Я отредактировал эту тему. – Jelle

+0

@Jelle - пожалуйста, напишите код, который вы нашли полезным в качестве ответа, и отметьте его как таковой, чтобы те, кто пришел после, могли более четко увидеть ответ. –

ответ

0

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

Sub Macro2() 

Dim c As Range 
Dim nRows As Integer 
Dim i As Integer 
nRows = 300 

i = 9 
For Each c In Range("$H$9:$H$309") 

    c.Select 
    SolverOk SetCell:=Range("H" & i), MaxMinVal:=3, ValueOf:=0, ByChange:=Range("K" & i), Engine:=1 _ 
     , EngineDesc:="GRG Nonlinear" 
    SolverSolve True 
    i = i + 1 

Next c 
End Sub 
+0

Я использовал этот код пару раз, и он работал в большинстве случаев. У меня теперь есть дополнительный вопрос. Можно ли добавить код, чтобы убедиться, что все решения в ячейках столбца K всегда больше, чем решение в предыдущей ячейке столбца K (например: K9> K8, ...., K309> K308) ? Заранее спасибо. – Jelle

0

Я нашел этот код и он работал:

Sub example() 

Dim oRng As Range 
Dim c  As Range 

Set oRng = Range("K9:K309") 
For Each c In oRng 
    c.GoalSeek _ 
     Goal:=0, _ 
     ChangingCell:=c.Offset(0, -3) 
Next c 

End Sub 

Код, написанный queens_living даже сделал лучшую работу.

Спасибо!

Смежные вопросы