2

我正在尝试使用 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

在此处输入图像描述

4

3 回答 3

6

使用 anAutoFilter比 range 循环更有效

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
于 2012-11-29T02:22:14.667 回答
2
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
于 2012-11-28T21:56:54.870 回答
1

这应该有效:

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
于 2012-11-28T21:56:32.857 回答