VBA 迭代到最后一个填充的行



我从某人那里得到了下面的脚本,然后对其进行了修改以使用我的工作簿。本质上,正在发生的事情是 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

这应该可以满足您的需求。我添加了一个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

我不知道如何在注释中嵌入代码,所以我写了这个作为答案。

@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

最新更新