这段代码检测单元格W14中的值,然后使其成为负绝对值。它应该使W列中存在的每个值都在W14之后作为负绝对值。当我运行它时,它将永远循环,使得W14之后的每个单元格都是负绝对值,即使那里不存在值。如何将最后一个单元格中的值变为负数后停止循环?
For Each r In Range(Range("W14"), Range("W14").End(xlDown))
r.Value = -Abs(r.Value)
Next r
答案 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