通过VBA删除Excel中的半空白记录

时间:2015-03-16 15:11:10

标签: excel vba excel-vba

我正在尝试删除VBA中不完全空白的行。我说这个的原因是因为我无法应用完全空白的条件,就像我的第一列永远不会是空白而我想过滤第二列。

lastrow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
For i = 1 To Counter
If ActiveCell = "" Then
Selection.EntireRow.Delete
Counter = Counter - 1
Else
ActiveCell.Offset(1, 0).Select
End If
Next i

   ( Given Info )                    Desired Result

Name   ID   Address                   Name   ID   Address
John        NYC                       Jack   55   Chicago
Jack   55   Chicago                   Kate   65   Boston
Kate   65   Boston                    
Mike        London

现在偏移将始终遍历到下一行,但如果行的第二列为空,如何删除整行。感谢。

2 个答案:

答案 0 :(得分:3)

我会用这个。循环遍历A列中的每个单元格,从最高编号的行到单元格A1,如果B列中同一行中的单元格为空,则删除该列。

注意:我取出了ActivateSelect。它们不是必需的,会降低您的代码速度。

Sub test()
Dim i As Integer
For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    If Range("b" & i) = "" Then
        Range("b" & i).EntireRow.Delete
    End If
Next i
End Sub

或者,你可以使用它:

Sub test2()
    Dim blank_Bs As Range
    On Error Resume Next
    Set blank_Bs = Range("b1:b" & Range("a" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
    If Not blank_Bs Is Nothing Then _
      blank_Bs.EntireRow.Delete
    On Error GoTo 0
End Sub

答案 1 :(得分:2)

.AutoFilter只能显示要删除的行。

Sub nuke_Blank_Bs()
    With ActiveSheet
        With .Cells(1, 1).CurrentRegion
            If .AutoFilter Then .AutoFilter
            .AutoFilter Field:=2, Criteria1:="="
            With .Offset(1, 0)
                If CBool(Application.Subtotal(103, .Cells)) Then _
                    .EntireRow.Delete
            End With
        .AutoFilter
        End With
    End With
End Sub

这将过滤B列中的空白条目,并在找到条目时删除整个行。