我编写了以下脚本来删除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如果它也是空的(因为这在列的末尾只是空的)但是这个方法似乎不起作用。我还有另一个角度吗?
谢谢
答案 0 :(得分:2)
你的方法应该从底部开始并开始工作。如果不执行此操作可能会在删除行 i 时导致跳过空白,行会向上移动,但您会增加 i 并继续按下。
但是,最好的办法是将Range.SpecialCells method与xlCellTypeBlanks参数一起使用。
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