基于search键VBA删除行

我试图删除使用VBA在列B中find值“X”的每一行。 不过,我有三个问题:

  1. 我不能让我的VBA代码使用cells.find方法从活动单元格下移到下一个单元格(B3)(请参阅下面的代码)
  2. 我的代码不会删除列B中find值“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 

在这里输入图像描述

使用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 
 dim x as long dim r as long dim sht as worksheet set sht = Worksheets("Sheet1") r = sht.Cells(rows.count,2).end(xlup).row for x = r to 2 step -1 with sht.cells(x,2) if .value = "X" then .entirerow.delete end with next x 

这应该工作:

 Sub DeleteRowsWithX() maxRow = ActiveSheet.UsedRange.Rows.Count For i = 1 To maxRow Do While (StrComp(ActiveSheet.Cells(i, 2).Text, "X", vbTextCompare) = 0) Rows(i).Select Selection.Delete Shift:=xlUp Loop Next End Sub