2016-11-27 81 views
-1

我有一個有300行數據的excel文件,我需要在每一行中使用求解器。在列K的每個單元中有一個方程,通過改變單元H9應該等於零。使用宏的Excel求解器

求解:

  • 靶細胞:K9(應等於 「0」)
  • 通過改變細胞:H9
  • 輸出單元:H9

求解器應該從排工作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列的單元格的所有解決方案總是比collumn 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甚至做了一個更好的工作編寫的代碼。

謝謝!