我对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的行,然后删除包含那些值的那些行,然后关闭过滤器并获取没有空白行的表。
答案 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)
我希望这可以解决您的问题。