在Excel中使用VBA删除基于多个单元格值的行

时间:2016-05-27 20:31:52

标签: excel vba excel-vba macros

我正在尝试删除A列中为空的行,而不是整个Excel表中的B列中的空行。

这是因为我需要保留具有A值的行,但是我还需要保留其中没有任何内容的行(它们是我的间隔符)。

我试过这个:

Sub DoStuffIfNotEmpty()
    If Not IsEmpty(Colmuns("B").Value) Then
        ActiveCell.Columns("A").SpecialCells(xlBlanks).EntireRow.Delete
    End If
End Sub

删除了我的垫片

我试过这个:

Sub QuickCull()
    On Error Resume Next
    Columns("A").Columns("B").SpecialCells(xlBlanks).EntireRow.Delete
End Sub

哪个会删除其中一个符合此条件的行

我试过这个:

Sub delete_Me()
Dim LastRow As Long, x As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For x = LastRow To 1 Step -1
    If Not IsEmpty(Colmuns("B").Value) And _
    Columns("A").Value Then
        Rows(x).Delete
    End If
Next
End Sub

哪个什么都没做......

如果有人能指出我正确的方向,那就太棒了!

3 个答案:

答案 0 :(得分:3)

尝试这样的事情:

Sub removeRows()

Dim LastRow As Long
Dim rowNum As Integer
LastRow = Cells(Rows.Count, "B").End(xlUp).Row

For rowNum = LastRow To 1 Step -1
    If Range("B" & rowNum).Value <> "" And Range("A" & rowNum).Value = "" Then
        Rows(rowNum).Delete
    End If
Next rowNum

End Sub

正如@findwindow和@Jeeped所指出的,循环应该从底行到顶行。我的错。我还使用“B”列调整了LastRow。

答案 1 :(得分:2)

可能还使用Count或counta

Sub Button1_Click()
    Dim LstRw As Long, Rng As Range
    LstRw = Cells(Rows.Count, "A").End(xlUp).Row


    For x = LstRw To 1 Step -1
        If Application.WorksheetFunction.Count(Range(Cells(x, 1), Cells(x, 2))) = 0 Then Rows(x).Delete
    Next

End Sub

答案 2 :(得分:2)

使用Range.AutoFilter Method。过滤列A上的空白和列B上的非空格。检查是否有要删除的行后,删除它们。

Sub del_blankA_valueB()
    With Worksheets("Sheet1")
        If .AutoFilterMode Then .AutoFilterMode = False
        With .UsedRange.Cells
            .AutoFilter field:=1, Criteria1:="="
            .AutoFilter field:=2, Criteria1:="<>"
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                If CBool(Application.CountA(.Columns(2))) Then
                    .Cells.EntireRow.Delete
                End If
            End With
        End With
        If .AutoFilterMode Then .AutoFilterMode = False
    End With
End Sub