如果特定范围内的单元格全部为空,则删除整行

时间:2016-04-18 20:36:41

标签: excel vba

我想创建一个宏,如果特定范围内的所有单元格(10行中每一行中的B到K)都为空,则会删除整行。我尝试了以下方法:

Dim i As Integer
Dim rng As Range

For i = 1 To 10
Set rng = Range("B" & i, "K" & i).SpecialCells(xlCellTypeBlanks)
rng.EntireRow.Delete
Next i

如果有更多跟随行的空单元格,让我们说1和2,它会删除第1行并移动第2行而不是删除的第1行,因此它会变成第1行。然后它会跳过移动的行,因为我总是会增加所以它再也不会检查第1行。有没有办法检查刚刚删除的行是否真的非空,然后再移动到下一个i?

顺便说一句:我使用的是Excel 2013。

1 个答案:

答案 0 :(得分:3)

为什么不使用CountA()

,而不是使用特殊单元格
Sub t()
Dim i&

For i = 10 To 1 Step -1
    If WorksheetFunction.CountA(Range("B" & i, "K" & i)) = 0 Then
        Rows(i).EntireRow.Delete
    End If
Next i
End Sub

这样,如果没有空白,您可以避免任何错误。此外,删除行时,建议从结尾开始,然后Step -1开头。

编辑:

试试这个,它可能会更快:

Sub T()
Dim rng As Range

Set rng = Range("B1:K10") ' Since you're going to loop through row 1 to 10, just grab the blank cells from the start
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Select ' Just to show you what's being selected. Comment this out in the final code
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

我建议首先使用F8逐步完成,看看它是如何工作的。在B1:K10范围内,它将首先选择所有存在空白单元格的行。然后,它将删除这些行。