excel - Excel VBA:从求解器迭代中复制单元格并使用 VBA 将结果粘贴到表中
问题描述
我的 VBA 编码经验非常有限,对于任何天真者,请提前道歉。我已经附上了我的 Excel 表格,所以你可以看到我指的是什么。
对于一个班级项目,我得到了一系列 15 个项目。这些项目有一系列的利润和收入输入,但除了一列之外,所有这些都保持不变。我应该使用求解器来找到这些项目中最有价值的组合,同时最大限度地降低成本。我明白该怎么做。但我应该使用 VBA 编码通过表格运行一个替代值列表,并为每个值解决最佳项目组。O5 中的生命值和 O6 中的伤害值发生了变化。对于每次求解器迭代,我需要一次将这些值替换为列表中的值(单元格 N11 到 O26)。此外,对于我浏览列表时的每个结果,我需要制作另一个表格来记录所选项目。所以对于我给出的图片,我需要记录 F1、G、H 和 J1。
我的问题是:如何使用 VBA 在变量表中循环求解器并将每次求解器迭代的结果记录在新表中?我在想我会使用 VBA 根据“选择”列中的二进制求解器结果,使用已批准的项目复制单元格的内容,但我不知道该怎么做。
任何帮助将不胜感激,谢谢!
解决方案
我自己解决了。我不知道这是否会帮助任何人,但这是我的代码。
Sub Sheet1()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayStatusBar = False
End With
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 12 To 26
'Enters Life Value for iteration
Range("O5").Value = Range("N" & i).Value
'Enters Injury Value for iteration
Range("O6").Value = Range("O" & i).Value
'Solve Scenario with given Life and Injury Values
SolverSolve UserFinish:=True
'Sets up a table which collects all the chosen projects into one column
'so they can be selected and put into a single cell as the result for the loop iteration
For k = 5 To 21
binary = Range("L" & k).Value
'Enters Project Name if solver choses it
If binary = 1 Then Range("T" & k) = Range("B" & k).Value
'Returns cell to blank if project is not chosen
If binary = 0 Then Range("T" & k) = Range("A" & k).Value
Next
'Copy the projects selected into a table of results
Range("R25").Value = "=CONCAT(T5:T21)"
Range("R25").Copy
Range("W" & i).PasteSpecial xlPasteValues
'Copy the Cost of each project selection iteration into table
Range("P9").Copy
Range("X" & i).PasteSpecial xlPasteValues
'Copy the number of projects selected for each scenario
Range("Y" & i).Value = Range("N9")
'Returns the choice column to all zeros in preparation for new loop
Range("L5:L21").Value = 0
Next
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayStatusBar = True
End With
End Sub
推荐阅读
- c++ - 在 C++ WinRT 中无法获取异步操作结果(Windows::Foundation::IAsyncOperation 接口)
- twitter-bootstrap - 表单输入中的弹出窗口
- sql-server - 如何在 MSSQL Server 插入或更新触发器上获取行 ID
- java - 在 Control SWT 中适合背景图像
- material-components - 如何使 TextInputLayout 的提示文本垂直居中?
- asp.net - Angular2 显示 .NET API 验证消息
- java - paintComponent 方法只被调用一次
- c# - 根据另一个值有条件地映射 LINQ 中的新属性
- d3.js - Crossfilter 和 DC.js 的平均值
- wpf - 我可以在 WPF 应用程序中使用 ResourceDictionary 和 UserControl 吗