我有一個大的數據集和一些當前的VBA代碼來進行一些計算。我的代碼執行以下操作:使用VBA求解器與嵌套循環結合使用
- 它包括兩個嵌套的循環和複製和粘貼結果在Excel中一些方程爲大彙總表。
- 然後代碼對數據進行排序並應用一些高級篩選器以及許多標準來得出解決方案。
我想知道是否可以使用VBA解算器代碼通過改變高級過濾器標準與當前循環的組合來最大化我的解決方案?此時我必須手動迭代它,但希望能夠包含求解器以消除手動迭代並確定最佳濾波器標準以最大化解決方案。
我意識到求解器的基本功能的偉大工程,如果我有在Excel中像mx + b = c
一個簡單的等式,我想通過改變m
和b
最大化的c
價值。但我不確定是否可以,或者如何在當前循環中應用求解器? 我的主要問題是,如果有人認爲VBA求解器(或類似的)可以用於我的應用程序。
如果以下需要的是我當前的代碼,並且要注意我在VBA中自學,所以我的代碼可能不是最有效的。
Sub Builder()
Dim LastRow As Long
Dim FirstRow As Long
Dim UsedRng As Range
Dim FirstYr As Integer
Dim LastYr As Integer
Dim Counter1 As Single
Dim DeleteRow As Long
Windows("Model.xlsm").Activate
Sheets("Full List").Select
Set UsedRng = ActiveSheet.UsedRange
LastRow = UsedRng(UsedRng.Cells.Count).Row
Sheets("ModelSummary").Range("F1").Value = LastRow
FirstYr = Sheets("ModelSummary").Range("w5").Value
LastYr = Sheets("ModelSummary").Range("w6").Value
Windows("Portfolio.xlsm").Activate
Sheets("Builder").Select
Range("A7:R23").Select
Selection.ClearContents
Windows("Model.xlsm").Activate
Counter1 = 0
For j = FirstYr To LastYr
Sheets("Model").Range("o15").Value = j
Sheets("Full List").Select
Range(Cells(2, 1), Cells(LastRow + 1, 1)).Select
Selection.Copy
Sheets("ModelSummary").Select
Cells(8, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(6, 1).Value = j
Sheets("Model").Select
Range("H5:H24").Select
Selection.Copy
Sheets("ModelSummary").Select
Cells(7, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Cells(8, 1).Select
For i = 1 To (LastRow - 1)
Selection.Copy
Sheets("Model").Select
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("I6:I24").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("ModelSummary").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
ActiveCell.Offset(1, -1).Select
Next
Range(Cells(7, 1), Cells(LastRow + 6, 20)).Select
ActiveWorkbook.Worksheets("ModelSummary").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ModelSummary").Sort.SortFields.Add Key:=Range(_
Cells(7, 14), Cells(LastRow + 5, 14)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("ModelSummary").Sort
.SetRange Range(Cells(7, 1), Cells(LastRow + 6, 20))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
DeleteRow = Application.Match(Range("o1").Value, Range(Cells(8, 14), Cells(LastRow + 6, 14)), 0) + 7
Range(Cells(DeleteRow, 1), Cells(LastRow + 6, 20)).Clear
Windows("Model.xlsm").Activate
Sheets("ModelSummary").Select
Range(Cells(7, 1), Cells(LastRow + 6, 20)).Select
Range(Cells(7, 1), Cells(LastRow + 6, 20)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("E2:T3"), Unique:=False
Range("A6").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Portfolio.xlsm").Activate
Sheets("Builder").Select
Cells(7, 1 + Counter1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Model.xlsm").Activate
Range("A6").Select
Selection.ClearContents
Range(Cells(7, 1), Cells(LastRow + 6, 20)).Select
Selection.ClearContents
Counter1 = Counter1 + 1
Next
Windows("Portfolio.xlsm").Activate
Sheets("Builder").Select
Range("S2").Select
Selection.Copy
Sheets("Summary").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
你有沒有試過打開「記錄宏」做你想做的解決方案,然後看代碼?我從來沒有這樣做過,但如果記錄宏,記錄一些東西,我會從那裏開始。 –