【问题标题】:Formula that deletes filtered results, but if nothing is found, deletes everything删除过滤结果的公式,但如果没有找到,则删除所有内容
【发布时间】:2018-05-21 11:29:56
【问题描述】:
Dim rng3 As Range

    Set rng3 = Range("J1").CurrentRegion

    rng3.AutoFilter Field:=10, Criteria1:="<>", Operator:=xlFilterValues

    With rng3
        With .Offset(1).Resize(.Rows.Count - 1)
            Application.DisplayAlerts = False
            .Rows.Delete
            Application.DisplayAlerts = True
        End With
    End With

上述代码(理论上)过滤“J1”,除空白(“”)以外的任何内容,然后删除结果。问题是如果 J 列中已经只有空白数据,它会删除所有内容。

【问题讨论】:

  • .SpecialCells(xlCellTypeVisible)

标签: excel with-statement vba


【解决方案1】:

我刚刚尝试并测试了以下内容,结果如您所愿:

Sub foo()
    Set rng3 = Range("J1").CurrentRegion
    rng3.AutoFilter Field:=10, Criteria1:="<>", Operator:=xlFilterValues

    With rng3.SpecialCells(xlCellTypeVisible)
            Application.DisplayAlerts = False
            NewAddress = Replace(rng3.Rows.Name, "A$1", "A$2")
            Range(NewAddress).Delete
            Application.DisplayAlerts = True
    End With
End Sub

或者使用不同的方法:

Sub foo2()
LastRow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row 'Find the last row with data on Column A

For i = 2 To LastRow 'Loop from Row 2 to the Last Row with data
    If Sheet1.Cells(i, 10).Value <> "" Then Sheet1.Rows(i).Delete 'Check Column J for any value, and if it has a value delete that row
Next i
End Sub

【讨论】:

  • 好地方!看到specialcells 没有被使用后,我没有继续阅读
  • 您排除调整大小代码的问题是,现在标题被删除,这并不理想......
  • @K.Robert 更新了我的答案以排除第一行,一个小解决方法,我相信有更好的方法可以做到这一点,但现在,这会做你想要的。跨度>
  • 如果没有什么可删除的,它会在 NewAddress = Replace(rng3.rows.Name, "A$1", "A$2") 行出现错误。
  • 我想我会用一个错误代码绕过这个,感谢到目前为止的帮助:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多