在求解器中添加单元格以进行更改

我有一个范围从A1到J1,我想改变使用求解器来优化某个值。 通常我会做以下事情:

SolverOK ByChange:=Range("A1:J1") 

但是,我的程序随机填入A1:J1范围内的一些单元格,其中固定的数字必须保留在那里。 如何只将空单元格添加到SolverOk ByChange:=参数?

 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 0 1 1 0 

例如,我可能有上面的设置,我只想要将单元格B1,D1,E1,G1,H1和I1添加到求解器更改单元格参数中。

我尝试循环遍历空单元格,并将其添加到求解器中,但是这并不起作用,因为只有最后一个空白单元格会被添加,而不是其他单元格。 任何帮助将非常感激。 非常感谢。

你可以捕获任何真正的空白单元格在一个范围内(使用SpecialCells(xlBlanks) ),然后将这个地址送入Solver VBA( ByChange:=rng1.Address ),即下面的示例代码,如果有空白单元格

 Sub Macro1() Dim rng1 As Range On Error Resume Next Set rng1 = Range("A1:J1").SpecialCells(xlBlanks) On Error GoTo 0 If Not rng1 Is Nothing Then SolverOk SetCell:="$B$2", MaxMinVal:=1, ValueOf:=0, ByChange:=rng1.Address, Engine:= _ 1, EngineDesc:="GRG Nonlinear" End If End Sub 

只是想分享一个类似的问题,我解决了上述解决scheme。 我想创build一个macros来临时“locking”一个单元格(将其从单元格列表中删除,以便更改),如果我有一个值,我想修复该特定的运行。 可能有一个更优雅的方法,但通过使用这个代码,我可以按下一个button,将一个angular色放在单元格上,从我想要locking的单元格中移出两个(增加了显示单元格被locking的好处)并调整单元格的列表来改变,而无需打开解算器窗口。

 Sub Lock1B() Dim rng1 As Range Range("X7") = "#" On Error Resume Next Set rng1 = Range("X7:X15").SpecialCells(xlBlanks) On Error GoTo 0 If Not rng1 Is Nothing Then SolverOk ByChange:=rng1.Offset(0, 2).Address End If