我正在为几个场景运行GoalSeek,只有一个输出B95。
在每个场景运行之后,我需要存储GoalSeek正在更改的单元格B4的值。
此值需要存储在单元格P97、P98和P99中(三个场景对应三个值)。
使用我当前的宏,我可以看到GoalSeek正在工作,但是值没有存储,并且在单元格P97、P98和P99中输入了“False”。
'tolerance'是在GoalSeek没有找到精确匹配时的预防措施。(我处理的是百分比,希望公差为± 1%。)
我知道问题出在If语句的前半部分。我希望在进入下一个单变量求解方案之前存储GoalSeek找到的值。
Sub Button1_Click()
Dim k As Integer
Dim PurchasePrice As Integer
Const tolerance As Long = 0.01
For k = 87 To 89
Range("B95").GoalSeek Goal:=Cells(k, "O"), ChangingCell:=Range("B4")
If Cells(95, "B").Value <= Cells(k, "O") + tolerance And Cells(95, "B").Value >= Cells(k, "O") - tolerance Then
PurchasePrice = Range("B4").Value
Range(Cells(k, "P")).Value = PurchasePrice
Else
Cells(k, "P") = False
End If
Next k
End Sub
1条答案
按热度按时间ssm49v7z1#
你有一个基本的错误:
如果要保持代码不变,则需要将其更改为
除此之外,你的逻辑似乎是合理的。为了测试,我重写了“我的首选”语法(见下文)。它有点简单(帮助我看得更清楚)。然而,基本的逻辑是你的(净的错误)。
另外,您在文本中表示希望公差为± 1%。但是,您添加和减去的是文字0.01(而不是1%)。要应用百分比,请将检验更改为:
最后,您在文本中说“此值需要存储在单元格P97、P98和P99中(3个方案有3个不同的值)"。但是,您的代码从第87行获取并存储到第89行。要更改到第97行到第99行,请更改For values per:
总而言之,假设您的描述性文本是准确的,而代码是不准确的,那么统一的解决方案是: