【问题标题】:Macro to remove all rows except those containing certain text删除除包含某些文本的行之外的所有行的宏
【发布时间】:2013-11-04 14:12:11
【问题描述】:

我正在尝试编写一个宏,它将删除每一行,除了那些包含一些特定文本的行。

我需要具备以下条件:

  • 永远不要删除前 2 行
  • 排除在 C 或 D 列中可以找到“Somme”一词的行。

注意,Somme 一词是 C 或 D 列中字符串的一部分。找到的文本示例如下:

Somme alpha/000284727819293

到目前为止,我所拥有的是删除带有 Somme 的行的代码,但是我需要相反的:

Sub CleanUp()
    Dim c As Range
    Dim SrchRng

    Set SrchRng = ActiveSheet.Range("D3", ActiveSheet.Range("D65536").End(xlUp))
    Do
        Set c = SrchRng.Find("Somme", LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
End Sub

【问题讨论】:

  • 为什么不使用自动过滤器? stackoverflow.com/questions/11631363/…
  • 我需要从页面中删除内容,而不是因为我正在做的其他事情而将其过滤掉
  • 试一试。我已经准备好代码并向您保证 Autofilter 可以工作:)

标签: vba excel


【解决方案1】:

试一试:

Sub SaveSomeRows()
    Dim N As Long, L As Long, r As Range
    Dim s As String, v As String
    Set r = ActiveSheet.Range("D3", ActiveSheet.Range("D65536").End(xlUp))
    N = r.Count
    s = "somme"
    For L = N To 1 Step -1
        v = LCase(r(L).Value)
        If InStr(1, v, s) = 0 Then
            r(L).EntireRow.Delete
        End If
    Next L
End Sub

编辑#1

宏的初始版本忽略了列C.....试试这个:

Sub SaveSomeRows()
    Dim N As Long, L As Long, r As Range
    Dim s As String, v As String
    Set r = ActiveSheet.Range("D3", ActiveSheet.Range("D65536").End(xlUp))
    N = r.Count
    s = "somme"
    For L = N To 1 Step -1
        v = LCase(r(L).Value & r(L).Offset(-1, 0).Value)
        MsgBox v
        If InStr(1, v, s) = 0 Then
            r(L).EntireRow.Delete
        End If
    Next L
End Sub

【讨论】:

  • 为我工作(第一个例子)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2018-11-16
  • 1970-01-01
  • 2012-12-18
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多