我怎样才能防止写这个VBA脚本来清除列中的空白,从而拖延最后?

我有以下脚本写入删除空格在Excel中的长列中的单元格

Sub RemoveBlanks() Dim Rng As Range Dim i As Long i = 1 Application.ScreenUpdating = False Do While i <= 30000 Set Rng = Range("A" & i) If Application.WorksheetFunction.CountA(Rng) = 0 Then Rng.Delete Shift:=xlUp ElseIf Application.WorksheetFunction.CountA(Rng) = 1 Then i = i + 1 Else: Stop End If Loop End End Sub 

我想这是一个'一刀切'的macros,所以如果只有20000行,脚本仍然会用完,直到结束。 我一直在尝试添加另一个设置为rng, rng.offset(10,0)范围chunk并告诉脚本增加i,如果这个也是空的(因为这只在列的末尾是空的),但是这种方法似乎没有工作。 我可以采取另一个angular度吗?

谢谢

尝试设置一个dynamic范围:

更换

 Do While i <= 30000 

 range = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row Do While i <= range 

接下来的事情是你必须更新你的范围,如果你删除了一些东西,所以在这一行之后:

 If Application.WorksheetFunction.CountA(Rng) = 0 Then Rng.Delete Shift:=xlUp 

添加以下代码:

 Range = Range -1 

你的方法应该从底部开始,并开始工作。 如果没有这样做,可能会导致在第i行被删除时跳过空白,这些行会向上移动,但是会增加i并继续向下。

但是,最好的办法是使用Range.SpecialCells方法和xlCellTypeBlanks参数。

 with worksheets("Sheet1") with .columns(1) on error resume next .specialcells(xlcelltypeblanks).delete shift:=xlup on error goto 0 end with end with 

如果大量不连续的单元格被删除,这可能会很慢。 可能不会像一次骑自行车一样慢,但仍然很耗时。