基于搜索关键字VBA删除行

Ant*_*ony 2 excel vba excel-vba

我试图删除使用VBA在B列中找到值"X"的每一行.但是,我有三个问题:

  1. 我无法使用cells.find方法将我的VBA代码从活动单元格下移到下一个单元格(B3)(请参阅下面的代码)
  2. 我的代码不会删除在B列中找到值"X"的整行
  3. B列中的数据量可能会有所不同:它可以在今天的B10结束,或明天的B100结束(参见下面的屏幕截图)

任何帮助将不胜感激.

Sub RemoveRows()   
    Dim strLookFor As String
    Dim strRow As String

    Worksheets("Sheet1").Range("B2").Activate

    strLookFor = "X"
    strRow = Range("B2").Address

    Do Until ActiveCell.Value = ""        
        MsgBox (ActiveCell.Value)        
        If ActiveCell.Value = strLookFor Then
            Rows.Delete (strRow)
        End If            
        strRow = Cells.Find(what:=strLookFor).Address
    Loop

    MsgBox ("Deleted all rows with value " & strLookFor)    
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

bre*_*tdj 6

使用a AutoFilter比范围循环更有效

Sub QuickCull()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("Sheet1")
Set rng1 = ws.Range(ws.[b2], ws.Cells(Rows.Count, "B").End(xlUp))
Application.ScreenUpdating = False
With ActiveSheet
        .AutoFilterMode = False
        rng1.AutoFilter Field:=1, Criteria1:="X"
        rng1.Offset(1, 0).EntireRow.Delete
        .AutoFilterMode = False
    End With
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

  • @Zeinab Abbasi:尽管已经晚了,但它可能会帮助其他人:`设置rng1 = ws.Range(ws.[b2],ws.Cells(Rows.Count,"B").End(xlUp))`Is指定范围从B2到B中的最后一行...`Rows.Count,"B").End(xlUp)`计算B列中的行.由于中间可能有空行,建议启动计算自下而上以获得最后使用的行.Offset说:备用标题Row(1),但除此之外删除整行,符合条件.(手动你点击一个过滤器,将可见的过滤器限制到那个过滤器并选择其余的,然后点击DEL)希望有所帮助. (3认同)