VBA迭代直到最后一行填充

时间:2018-05-10 10:00:05

标签: excel vba excel-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

2 个答案:

答案 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