【20171117】- VBA可以用來規劃求解?

最近群里新加入了好幾個新夥伴,諮詢的問題都很有意思,今天為大家介紹的是位成都的會計諮詢的規劃求解問題,當然她諮詢的問題並沒有標題那麼複雜。問題截圖如下:

圖中小夥伴的信息我都塗抹了,因為有小夥伴反映我泄露他們的信息了。後面諮詢的問題截圖我都會加以修飾,除非小夥伴同意無碼展示

其實該小夥伴的問題很簡單,是由於設置的規劃求解參數有誤。既然有小夥伴用到規劃求解,今天就和大家分享一下如何使用規劃求解。首先第一個問題要解決的就是規劃求解從哪裡能夠找到?請跟隨Steven一起設置吧,詳見如下動態圖:

因為Excel默認是關閉規劃求解的,需要的時候可以參照如上動態圖進行開啟;Excel 2003開始就已經有了規劃求解,如果沒有找到該載入項,請在Office 2003安裝的時候控制面板添加Office組件時勾選,如果選擇全部功能,那肯定會安裝的哦。

通過設置,可以從【數據】選項卡的最後找到【規劃求解】按鈕,如下圖所示:

為了更加形象的演示規劃求解過程,我引用了成都小夥伴的一個在有限資源內使邊際貢獻最大的問題。問題數據截圖如下:

其實實際問題只是上圖中的左側三列,右側四列數據是為了讓大家更好的理解問題而填寫上去的,把朱爾斯生產數設置為X1,朱古力生產數設置為X2;最終要求的目標函數:MAXF=1.00*X1+2.00*X2;因為生產數不可能為負數且為整數,故X1、X2必須大於等於零;因資源有限,故又有2個約束條件,分別為0.02*X1+0.05*X2<=700和0.20*X1+0.25*X2<=5000。

上面的問題是個非常典型的案例,很多小夥伴可能都已經接觸過,有了變數、目標函數和約束條件,再結合Excel的規劃求解,那麼該問題就非常容易了。規劃求解前,對數據和公式進行梳理就變得更加重要了,我的梳理如下:

通過和前面一張圖右側四列對比,應該就很容易理解為啥上圖需要這樣設定,有了這樣的設定,就可以點擊【數據】選項卡中的【線性規劃】,在彈出的對話框中設置如下參數

規劃求解參數的設定和Excel表格中E1:H5的描述相對應,就應該很容易理解為啥參數需要這樣設定了。

因為每次設定參數比較繁瑣,故編寫了一段VBA代碼,用來快速規劃求解,具體代碼如下:

Sub sutSolver()n Range("B9:C9") = 0n Range("D9").Formula = "=B9*1+C9*2"n SolverResetn SolverOk SetCell:="$D$9", MaxMinVal:=1, ValueOf:=0, byChange:="$B$9:$C$9", Engine:=1, EngineDesc:="GRG Nonlinear"n Solveradd CellRef:=Range("$B$9:$C$9"), Relation:=3, formulaText:="0"n Solveradd CellRef:=Range("$B$9:$C$9"), Relation:=4, formulaText:="整數"n Solveradd CellRef:="$D$10", Relation:=1, formulaText:=Range("B5")n Solveradd CellRef:="$D$11", Relation:=1, formulaText:=Range("C5")n SolverSolve UserFinish:=Truen SolverFinish KeepFinal:=1nEnd Subn

如果希望上面的代碼能夠正常運行,記得在VBE窗口中依次選擇【工具】→【引用】裡面勾選Solver.xlam(文件路徑為C:Program Files (x86)Microsoft OfficerootOffice16LibrarySOLVERSOLVER.XLAM,使用Everything搜索截圖如下圖所示:

正常勾選Solver.xlam後,如下圖所示:

萬事俱備,只欠動態演示,動態演示如下:

通過今天規劃求解的學習,想必大家對規劃求解有了一定的了解,以後工作中遇到類似的問題可以立刻行動起來了哦,如果在日常工作運用中遇到任何問題,歡迎加群(QQ群:615356012)進行交流~Written by Steven in 20171117^_^

微信公眾號:SaveUTime

SUT學習交流群:615356012,入群審核人:Steven

關注公眾號,提高效率,節約您的時間!


推薦閱讀:

百萬次實驗告訴你,堅持到底不一定勝利!
【VBA初學者教程】- 第一章 VBA入門知識:R1C1樣式引用單元格
【VBA初學者教程】- 第二章 了解對象、屬性、方法和事件:理論知識
【VBA初學者教程】- 第一章 VBA入門知識:相對引用單元格
EXCEL VBA小白第六課:豆瓣精選話題爬蟲數據分析小嘗試

TAG:VBA | 线性规划 | 约束求解 |