首页 > 解决方案 > 过滤器和整行删除问题

问题描述

我有问题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 的行,然后删除那些包含这些值的行,然后设置过滤器并获取没有空白行的表。

标签: excelvba

解决方案


Aleksander,也许我可以帮助你的案子。

根据我对您的问题和预期效果的理解,真的有必要实际使用过滤器吗?如果您使用它只是为了能够删除某一列中的所有空白行,那么一个简单的带有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)

我希望这能解决你的问题。


推荐阅读