Excel 如何在VBA中输出每次迭代的结果集?

Excel 如何在VBA中输出每次迭代的结果集?,excel,vba,loops,optimization,Excel,Vba,Loops,Optimization,如何在工作表的新行中输出每次迭代的结果集?i、 e循环通过(i,j,k,l,m)的所有可能组合 下面是一个改进的背包优化问题的代码(代码有效)。它最大化了5个不同料仓的平均蛋白质值,每个料仓都有边际限制 选项显式 亚蛋白calc() 模糊极限为双精度,tol为双精度,蛋白质为双精度,边缘为双精度,平均蛋白质为双精度,最大精氨酸为双精度 Dim i,j,k,l,m为整数 Dim Proteini、Proteinj、Proteink、Proteinl、Proteinm为双色 Dim Margini、

如何在工作表的新行中输出每次迭代的结果集?i、 e循环通过(i,j,k,l,m)的所有可能组合

下面是一个改进的背包优化问题的代码(代码有效)。它最大化了5个不同料仓的平均蛋白质值,每个料仓都有边际限制

选项显式
亚蛋白calc()
模糊极限为双精度,tol为双精度,蛋白质为双精度,边缘为双精度,平均蛋白质为双精度,最大精氨酸为双精度
Dim i,j,k,l,m为整数
Dim Proteini、Proteinj、Proteink、Proteinl、Proteinm为双色
Dim Margini、Marginj、Margink、Marginl、Marginm为双色
工作表(“simplecalc”).范围(“B19:H23”).清晰内容
工作表(“simplecalc”).范围(“B4:F4”).清晰内容
极限=范围(“D6”)。值“声明混合物上的最大蛋白质目标”
tol=范围(“G6”)。值“声明蛋白质混合物的耐受性,以接近最大蛋白质目标值
maximumMargin=范围(“G8”)。值“声明希望获得的最低保证金$/MT”
Proteini=范围(“B2”).值
Proteinj=范围(“C2”).值
Proteink=范围(“D2”).值
Proteinl=范围(“E2”).值
Proteinm=范围(“F2”).值
Margini=范围(“B3”).值
Marginj=范围(“C3”).值
Margink=范围(“D3”).值
Marginl=范围(“E3”).值
Marginm=范围(“F3”)。值
对于i=0至2’,循环至2,表示列车在i站可能出现双点
对于j=0到2
对于k=0到2
对于l=0到2
对于m=0到2
蛋白质=(Proteini*i+Proteinj*j+Proteink*k+Proteinl*l+Proteinm*m)/5个站点的5'线性平均值
边际=(边际指数*i+边际指数*j+边际指数*k+边际指数*l+边际指数*m)/5个测站边际指数的5'线性平均值

如果Margin>maximumMargin,Protein=0,m=0,l=0,k=0,j=0,i在将值写入工作表之前,您需要在每次迭代中增加行号。因此,声明一个迭代计数器变量:

Dim itrCount As Long
然后更改此选项:

If m >= 0 And m <= 2 Then
   Worksheets("simplecalc").Range("B23").Value = averageprotein
   Worksheets("simplecalc").Range("C23").Value = Proteini

如果m>=0,m=0,而m作为VBA代码是慢的,我会使用SQL(是否有一个问题不能用SQL轻松解决;),好的,有一些;()像往常一样,创建一个并删除查询条件中不需要的重复项。这应该比大多数减少循环次数的优化快得多。结果可以用
CopyFromRecordset
分配给一张工作表,我不确定我是否理解您的要求,但您可以用81*I+27*j+9*k+3*l+m+计算该行1@Zer0Kelvin希望为循环中的每个迭代输出“averageprotein=Protein”值。公式中的积分i,j,k,l,m循环通过,你可以把它们看作公式中的权重。这有意义吗?@ComputerVersteher希望我了解SQL…编程新手一般(如您所想象的)添加一些示例数据作为文本格式和预期输出。如果说使用数据sql的新手是一个完美的开始,那么与“普通”编程相比,基本的sql要简单得多。如果您从Ms ACCESS开始,就不需要编程,而且您以后会受益,因为大多数Excel用户不使用它(他们不知道),但它使许多问题易于解决,如果您知道如何使用数据,您可以避免许多问题。只需搜索一些“ms access查询教程”(无格式、报告或代码)。
If m >= 0 And m <= 2 Then
   Worksheets("simplecalc").Range("B23").Value = averageprotein
   Worksheets("simplecalc").Range("C23").Value = Proteini
If m >= 0 And m <= 2 Then
   itrCount = itrCount + 1
   Worksheets("simplecalc").Range("B23").Offset(itrCount).Value = averageprotein
   Worksheets("simplecalc").Range("C23").Offset(itrCount).Value = Proteini