Excel 根据单元格值在范围内删除行

Excel 根据单元格值在范围内删除行,excel,vba,Excel,Vba,我有Q6:V100范围内的员工数据。数据不在表中,数据由6列(职务、职务、工资等)组成,基于第一列“当前就业”,我想删除该员工不再就业的行(=“”)。如果使用,第一列显示“O”,如果没有,则显示“O”。这是我尝试过的代码。但它会显示错误消息 “范围类的自动筛选方法失败” 我不知道怎么了。。。如果有人能帮忙,我将不胜感激 Sub Delete_Rows_Based_On_Value() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheet

我有Q6:V100范围内的员工数据。数据不在表中,数据由6列(职务、职务、工资等)组成,基于第一列“当前就业”,我想删除该员工不再就业的行(=“”)。如果使用,第一列显示“O”,如果没有,则显示“O”。这是我尝试过的代码。但它会显示错误消息

“范围类的自动筛选方法失败”

我不知道怎么了。。。如果有人能帮忙,我将不胜感激

Sub Delete_Rows_Based_On_Value()

Dim ws As Worksheet


  Set ws = ThisWorkbook.Worksheets("Trainings")
  ws.Activate

  'Clear any existing filters
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

  '1. Apply Filter
  ws.Range("Q6:V100").AutoFilter Field:=1, Criteria1:=""

  '2. Delete Rows
  Application.DisplayAlerts = False
    ws.Range("Q7:V100").SpecialCells(xlCellTypeVisible).Delete
  Application.DisplayAlerts = True

  '3. Clear Filter
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

End Sub

我建议采用更稳健的系统,在Q列中用符号表示: 1=就业, 0=未就业

Sub Delete_Rows_Based_On_Value()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Trainings")
    ws.Activate

Dim i As Integer
Dim n as Integer

    n = ws.Range("Q6").CurrentRegion.Rows.Count

    For i = n + 5 To 6 Step -1
        If ws.Cells(i, 17).Value = 0 Then
            ws.Rows(i).Delete
        End If
    Next i
如果不适应新系统,请更改If语句以匹配当前系统:

If ws.Cells(i, 17).Value = "" Then

快速问题-如果您在下一步恢复时删除
,那么
ws.ShowAllData
是否会引发错误?(
ws.FilterMode
可用于检查筛选器是否处于活动状态)您的代码对我有效。如果你一步一步地看,是否真的有任何可见的行?过滤比循环快。确实如此-但所讨论的范围仅包含93行。所以在我看来,性能问题不应该成为一个问题。