我有一个大的数据集和一些当前的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
你有没有试过打开“记录宏”做你想做的解决方案,然后看代码?我从来没有这样做过,但如果记录宏,记录一些东西,我会从那里开始。 –