我有大约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,但我一直在遇到问题。
答案 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 。