VBA – 在if中减lessfor循环

我正在运行一个macros来清理工作簿中的空行,并且由于For循环的运行方式,它会错过连续的空行,因为它例如:

  • 检查第14行
  • 删除第14行因为空白
  • 15号线上移,成为新的线路14
  • For循环移动到第15行,缺less新行14

我的(可能有缺陷的)解决scheme是在删除一个步骤递减for循环的行之后添加一个步骤,以便它能够连续捕获。

我试过了:

For i = 1 To 2000 If IsEmpty(Cells(i, 6)) = True Then Rows(i).EntireRow.Delete i = i - 1 End If Next i 

似乎无限循环。 我也尝试过i – = 1, – i等,但是由于期望的expression式而失败了。 我= –i至less运行,但似乎并没有在删除空白行的工作。

有什么build议? 提前道歉,如果错过了一些明显的事情。

在删除时,你应该退后一步,所以从2000开始,一直到1,以确保没有行被跳过。

 For i = 2000 To 1 step -1 If IsEmpty(Cells(i, 6)) = True Then Rows(i).EntireRow.Delete End If Next i 

试着反向运行它,所以从2000开始(使用你的例子,或者我认为是Worksheet.Rows.Count),然后回到1.这样,当你删除一行时,你不需要摆弄循环索引。

所以:

 For i = 2000 to 1 step -1 If IsEmpty(Cells(i, 6)) = True Then Rows(i).EntireRow.Delete End If Next i 

你当前的代码循环的原因是2000行是空的,所以它删除它,并设置你的循环计数回到1999年,所以然后再次尝试2000行,这是空白等等。