如何选择一个范围内的所有空行并将其删除?

时间:2018-07-10 08:10:47

标签: vba excel-vba

我当前正在使用此代码来查找L列中的空单元格,如果该单元格为空以用于代码删除K和S之间的该行中的所有数据。它可以正常工作,直到获得连续的空白行;当代码删除第一行时,代码将移至下一个i,但由于移位,它会跳过空白行。 (不好意思的歉意)

Sub deleteempty2()
With Sheets("baml")

last2 = .Range("L" & Rows.Count).End(xlUp).Row

For i = 5 To last2
If .Cells(i, 12) = "" Then
    .Range("k" & i & ":s" & i).delete Shift:=xlUp
    last1 = last1 - 1
Else: End If
Next i


End With


End Sub

我尝试包括 do直到L5 <>“” ,然后加上一个循环,但这似乎进入了永久循环。

欢迎提出任何建议:)

2 个答案:

答案 0 :(得分:3)

删除时最好从最后一行到第一行进行操作,正如您提到的那样,行/单元格从上到下向上移动,您不会错过任何内容,如下所示:

Sub deleteempty2()
    With Sheets("baml")
        last2 = .Range("L" & Rows.Count).End(xlUp).Row

        For i = last2 To 5 Step -1
            If .Cells(i, "L") = "" Then
                .Range("K" & i & ":S" & i).Delete Shift:=xlUp
            End If
        Next i
    End With
End Sub

答案 1 :(得分:0)

一种更有效的方法(从我的角度来看),而没有 For 循环:

Dim ws As Worksheet
Dim rg As Range

Set ws = ThisWorkbook.Worksheets("baml")
Set rg = ws.Range("A1:C405") 'whatever the range you want

rg.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

我一直都这样做,而且效果很好!