【发布时间】:2020-08-13 06:40:50
【问题描述】:
我在 Excel 文件的 B 列中有数据。我做了一个循环,如果 B 单元格中的值大于特定 (len1) 值,则代码将单元格 (Value-Len1) 值放在行末尾的新单元格中。
每次添加行时,我都会将计数器递增为 lastrow = lastrow+1。现在问题来了。最初在输入文件中我有 122 组数据。但是当 For 循环完成时,lastrow 的值变为 160,但循环在 122 处退出。为什么?任何帮助将不胜感激。
For i = 1 To lastrow Step 1
If Range("B" & i).Value > len1 Then
Range("A" & lastrow + 1).Value = Range("A" & i).Value
Range("B" & lastrow + 1).Value = Range("B" & i).Value - len1
Range("B" & i).Value = len1
lastrow = lastrow + 1
End If
Next
【问题讨论】:
-
Lastrow 的值为 122,所以这就是循环在那里退出的原因
-
“To”值仅在 For 循环开始时计算一次,因此在该点之后更改
lastrow不会影响循环结束的时间。 -
但是这个值最初是,在循环结束时 lastrow 的值是 160....所以循环应该一直持续到 160。
-
另外一种更快的方法是将范围值导出到数组,然后进行比较。将最终输出存储到临时数组中并将其写回工作表。
-
@Abhay 就像蒂姆说的那样,
For i = 1 To lastrow Step 1被评估一次,所以循环不关心你在该行之后的Lastrow的值,当i = 122就是这样时它会停止.