我从某人那里得到了以下脚本,然后修改它以使用我的工作簿。基本上发生的事情是GoalSeek功能应用于列M和E.
所以我将列M设置为0.3,然后计算列E中的相应值。此时,第一行数据从第7行开始,到第33行结束。但是,我使用它来计算金融交易和有时我有比第7行到第33行更多的交易,例如我可能有7到60行。
如何修改VBA代码,以便将GoalSeek应用到最后一行数据(因此不是表格的最后一行是空的)?
每次我的交易分析超出第33行时,这将避免我手动编辑VBA的需要.Excel如何识别'例如,我的数据在第60行结束并自动将其合并到VBA中?
Public Sub GoalSeeker()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For I = 7 To 33
Cells(I, "M").GoalSeek Goal:=0.3, ChangingCell:=Cells(I, "E")
Next I
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
答案 0 :(得分:1)
这应该做你需要的。我已添加了With
来指定您正在谈论的表格 - 您需要将标签名称放入:
Public Sub GoalSeeker()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("YourSheetNameHere")
For I = 7 To .Cells(.Rows.Count, "M").End(xlUp).Row
.Cells(I, "M").GoalSeek Goal:=0.3, ChangingCell:=.Cells(I, "E")
Next I
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
答案 1 :(得分:0)
我不知道如何在评论中嵌入代码,所以我把它写成答案..
@CLR:我意识到它现在有效但令人奇怪的是,其中一个细胞变成了29.96%。其余的按预期变为30%?然后,我必须手动更改E列中的单元格,使M列中的单元格从29.96%变为30%。
这是我目前的代码:
Public Sub GoalSeeker()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("DealCalculator")
For I = 7 To .Cells(.Rows.Count, "M").End(xlUp).Row
.Cells(I, "M").GoalSeek Goal:=0.3, ChangingCell:=.Cells(I, "E")
Next I
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End sub
此外,我创建了一个Active X按钮,只需单击一下即可运行此宏,但我得到一个“编译错误。预期的结束子”,突出显示以下代码的第一行。我的错误在哪里?
Private Sub CommandButton1_Click()
Public Sub GoalSeeker()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("DealCalculator")
For I = 7 To .Cells(.Rows.Count, "M").End(xlUp).Row
.Cells(I, "M").GoalSeek Goal:=0.3, ChangingCell:=.Cells(I, "E")
Next I
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
End Sub