如何阻止编写此VBA脚本以删除列中的空格以防止在末尾停止?

时间:2016-02-11 11:08:56

标签: excel 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

我希望这是一个“一刀切”的宏,所以如果只有20000行,那么脚本将一直运行到最后。我一直在尝试添加另一个范围chunk,设置为rng, rng.offset(10,0)并告诉脚本增加i如果它也是空的(因为这在列的末尾只是空的)但是这个方法似乎不起作用。我还有另一个角度吗?

谢谢

2 个答案:

答案 0 :(得分:2)

你的方法应该从底部开始并开始工作。如果不执行此操作可能会在删除行 i 时导致跳过空白,行会向上移动,但您会增加 i 并继续按下。

但是,最好的办法是将Range.SpecialCells methodxlCellTypeBlanks参数一起使用。

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

如果删除大量不连续的单元格,这可能会很慢。可能不会像一次循环使用它们那么慢,但仍然很耗时。

答案 1 :(得分:1)

尝试设置动态范围:

替换

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