过滤器和整行删除问题

时间:2019-05-24 11:13:45

标签: excel vba

我对Entirerow.Delete有疑问。
有时,我的宏会删除工作表中的所有行,有时会返回到上一个错误处理和跳过顺序。

我试图过滤值,将它们分配给范围并删除范围,但是程序执行大约需要20分钟,所以我不得不终止处理。

wb_current.Worksheets("RH").Range("A6:V6").AutoFilter Field:=22, Criteria1:=Array("#N/A", ""), Operator:=xlFilterValues
With wb_current.Worksheets("RH")
    lng_last_row_main = .Cells(Rows.Count, 1).End(xlUp).Row
    If lng_last_row_main > 6 Then
        .Rows("7:" & lng_last_row_main).EntireRow.Delete
    End If
    .AutoFilterMode = False
    lng_last_row_main = .Cells(Rows.Count, 1).End(xlUp).Row
End With

我希望设置一个过滤器,以向我显示特定列中具有空白或NA的行,然后删除包含那些值的那些行,然后关闭过滤器并获取没有空白行的表。

1 个答案:

答案 0 :(得分:0)

亚历山大,也许我能为您解决问题。

根据我对您的问题和预期效果的了解,是否真的有必要实际使用过滤器?如果使用它只是为了删除特定列中的所有空白行,那么使用带有If函数的简单循环就足够了。

请在下面查看我建议的代码:

Sub delete_blank_rows()
Dim lastRow As Long
Dim cel As Range

lastRow = ThisWorkbook.Worksheets("RH").Cells(Rows.Count, 1).End(xlUp).Row

'loop through every cell in column C until the last row (lastRow is taken from column A)
For Each cel In ThisWorkbook.Worksheets("RH").Range("C1:C" & lastRow)

    'function that evaluates if cell in column C is blank/#N/A and deletes it if yes
    If cel.Value = "" Or cel.Value = "#N/A" Then
        cel.EntireRow.Delete
    End If
Next cel

End Sub

这对我的样本数据而言是完美的。请记住,标题位于我的示例数据的第一行-.Range("C1:C" & lastRow)

我希望这可以解决您的问题。