我在一张名为“优化”的工作表中有一系列专栏。有些列只包含一个条目(“FAIL”),而其他列包含一组整数。
我需要遍历列并删除其中包含FAIL的列。我使用的代码如下:
Sub delete_fails()
Dim empty_column1 As Integer
Dim iTimes As Long
Dim iRepeat As Integer
iTimes = Application.WorksheetFunction.CountA(Sheets("Optimisation").Range("1:1"))
empty_column1 = 1
For iRepeat = 1 To iTimes
If Sheets("Optimisation").Cells(1, empty_column1).Value = "FAIL" Then
Sheets("Optimisation").Columns(empty_column1).EntireColumn.Delete
End If
empty_column1 = empty_column1 + 1
Next iRepeat
End Sub
代码部分有效,因为它会删除一些FAIL列,但不会全部删除它们。在成功删除所有FAIL列之前,我必须运行宏10-15次。我可以清除代码中的错误,所以我只需运行一次宏吗?也许我需要指示Excel忽略任何包含数字的列并继续下一个?
(注意:如果编码会伤害你的大脑,那么这里的VBA总数会提前道歉。)
答案 0 :(得分:3)
当删除对象时,在你的情况下,Columns总是向后循环,所以改变你的循环:
For iRepeat = 1 To iTimes
要:
For iRepeat = iTimes To 1 Step -1
尝试以下代码:
With Sheets("Optimisation")
For iRepeat = iTimes To 1 Step -1
If .Cells(1, iRepeat).Value = "FAIL" Then
.Columns(iRepeat).Delete
End If
Next iRepeat
End With
答案 1 :(得分:0)
删除列后,不要增加empty_column1。
For iRepeat = 1 To iTimes
If Sheets("Optimisation").Cells(1, empty_column1).Value = "FAIL" Then
Sheets("Optimisation").Columns(empty_column1).EntireColumn.Delete
Else
empty_column1 = empty_column1 + 1
End If
Next iRepeat