循环以删除具有指定文本的单元格,直到找不到文本

时间:2016-01-03 20:32:57

标签: excel vba loops

我有大约50列和200行。假设有100个单元格包含文本“badtext”。

下面的宏在电子表格中找到“badtext”,记下地址,左侧1个单元格的偏移量,地址注释,然后删除两个单元格地址。它只执行一次,我需要它循环,直到它不再能够在电子表格中找到文本“badtext”。

Sub macro1()
Dim StartRange As String
Dim EndRange As String
Cells.Find(What:="badtext").Select
StartRange = ActiveCell.Address
Selection.Offset(0, -1).Select
EndRange = ActiveCell.Address
ActiveSheet.Range(StartRange & ":" & EndRange).Select
Selection.Delete Shift:=xlToLeft

End Sub

我在想Do While,但我一直在遇到问题。

2 个答案:

答案 0 :(得分:0)

一般情况下,发布循环版本的尝试会很好,所以我们可以看看"问题"是 ;-) 根据你的代码(我没有检查它是否符合你的描述,但是你说它有效..),带循环的版本看起来像这样:

Sub macro1()
    Dim StartRange As String
    Dim EndRange As String

    ' find first occurrence:
    Set cellHit = Cells.Find(What:="badtext").Select
    while Not cellHit Is Nothing Then ' as long as there is an occurrence left, run the loop body

    ' actual processing - as you did so far:
        StartRange = ActiveCell.Address
        Selection.Offset(0, -1).Select
        EndRange = ActiveCell.Address
        ActiveSheet.Range(StartRange & ":" & EndRange).Select
        Selection.Delete Shift:=xlToLeft

    ' find next hit:
        Set cellHit = Cells.FindNext(cellHit)
    wend

相反,你也可以使用do while循环。在这种情况下,您只需要重新排列find命令。

答案 1 :(得分:0)

您正在使用 badtext 删除单元格,因此您只需要继续查找它们,直到找不到它为止。

Sub remove_BadText()
    Dim str As String, fnd As Range

    str = "badtext"
    With Worksheets("Sheet1")
        Set fnd = .Cells.Find(what:=str, LookAt:=xlWhole, _
                              LookIn:=xlValues, MatchCase:=False, _
                              SearchFormat:=False)
        Do While Not fnd Is Nothing
            fnd.Offset(0, Int(fnd.Column <> 1)).Resize(1, 2 + Int(fnd.Column = 1)).Delete Shift:=xlToLeft
            Set fnd = .Cells.FindNext
        Loop
    End With
End Sub

目前还不清楚A列是否可能包含 badtext 。如果是这样,您不希望尝试向右偏移一列。在VBA中, True 相当于 -1