สอบถามปัญหาการใช้ VBA + Solver หลายตัวแปร
Posted: Fri Nov 27, 2020 11:51 pm
สวัสดีครับ อาจารย์และพี่ๆ
ผมลองใช้งาน Solver โดยมี Condition
1. Cell M3:N3 >=0
2. Cell K2 = 1
3. ให้ค่า L3 มีค่าน้อยที่สุด
โดยให้เปลี่ยนค่าใน Cell H3:I3
พอผมกด Solver ตาม Condition ด้านบนได้ค่า = 2.283823
แล้วผมก็ Record Macro (Macro1_Original) แต่พอกดที่ Record Macro แล้วค่าที่ได้ = 1.260106
ผมเลยไปหาอ่านแล้วแก้ไข Code (Macro1_Modify_1) พอกดก็ได้ = 1.260106
เลยเข้าไปดูใน Solver ว่ามีอะไรแปลกไหมก็เจอว่า Condition ที่ใส่เข้าไปมีแต่ ข้อ 1 เลยไม่แน่ใจว่าเป็นเพราะสาเหตุนี้หรือไม่ที่ทำให้ไม่เท่ากัน แล้วถ้าแบบนี้ควรแก้ไขยังไงได้บ้างครับ
ขอบพระคุณมากครับ
ผมลองใช้งาน Solver โดยมี Condition
1. Cell M3:N3 >=0
2. Cell K2 = 1
3. ให้ค่า L3 มีค่าน้อยที่สุด
โดยให้เปลี่ยนค่าใน Cell H3:I3
พอผมกด Solver ตาม Condition ด้านบนได้ค่า = 2.283823
แล้วผมก็ Record Macro (Macro1_Original) แต่พอกดที่ Record Macro แล้วค่าที่ได้ = 1.260106
ผมเลยไปหาอ่านแล้วแก้ไข Code (Macro1_Modify_1) พอกดก็ได้ = 1.260106
เลยเข้าไปดูใน Solver ว่ามีอะไรแปลกไหมก็เจอว่า Condition ที่ใส่เข้าไปมีแต่ ข้อ 1 เลยไม่แน่ใจว่าเป็นเพราะสาเหตุนี้หรือไม่ที่ทำให้ไม่เท่ากัน แล้วถ้าแบบนี้ควรแก้ไขยังไงได้บ้างครับ
ขอบพระคุณมากครับ
Code: Select all
Sub Macro1_Original()
SolverReset
SolverOk SetCell:="$L$3", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$3:$I$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$F$2", Relation:=1, FormulaText:="1"
SolverOk SetCell:="$L$3", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$3:$I$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$H$3:$I$3", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$L$3", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$3:$I$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$L$3", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$3:$I$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
End Sub
Code: Select all
Sub Macro1_Modify_1()
SolverReset
SolverAdd CellRef:="$F$2", Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$H$3:$I$3", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$L$3", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$3:$I$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve (True)
End Sub