在到达最后一个单元格后停止循环

时间:2018-01-18 17:15:44

标签: excel vba excel-vba

这段代码检测单元格W14中的值,然后使其成为负绝对值。它应该使W列中存在的每个值都在W14之后作为负绝对值。当我运行它时,它将永远循环,使得W14之后的每个单元格都是负绝对值,即使那里不存在值。如何将最后一个单元格中的值变为负数后停止循环?

For Each r In Range(Range("W14"), Range("W14").End(xlDown))
    r.Value = -Abs(r.Value)
Next r

2 个答案:

答案 0 :(得分:4)

如果Range("W14")是列中的最后一个非空单元格,它将仅循环到工作表的末尾。这就是你应该采用自下而上的方法的原因。

For Each r In Range("W14", Range("W" & Rows.Count).End(xlUp))
    r.Value = -Abs(r.Value)
Next r

答案 1 :(得分:1)

另一种方法:

Sub foo()
    Dim ws As Worksheet: Set ws = Sheets("Sheet1")
    'declare and set your worksheet, amend as required
    LastRow = ws.Cells(ws.Rows.Count, "W").End(xlUp).Row
    'get the last row with data on Column W

    For i = 14 To LastRow
        ws.Cells(i, "W").Value = -Abs(ws.Cells(i, "W").Value)
    Next r

End Sub