我正在电子表格上运行以下代码:
Do While i <= 100000
If Not Cells(i, 4) = "String" Then
Cells(i, 4).EntireRow.Delete
End If
i = i + 1
Loop
有很多条目not“字符串”,但它们不会被删除。
当我将这段代码复制到单独的工作表时,我什至收到错误“Excel 无法使用可用资源完成此任务。选择较少的数据或关闭其他应用程序。”
我做错了什么导致这个循环不起作用?
注意:我无法使用自动过滤器,因为我需要根据删除行not满足一个条件。
这是删除行的最糟糕的方法。原因
- 您正在删除循环中的行
- 您的 Cells 对象不合格
尝试这个。
无独有偶,我也在MSDN论坛回答过类似的问题。请参见THIS
试试这个方法(未经测试)
在下面的代码中,我将最后一行硬编码为100000
与上面链接中所做的不同。
Sub Sample()
Dim ws As Worksheet
Dim i As Long
Dim delRange As Range
'~~> Set this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
For i = 1 To 100000
If .Cells(i, 4).Value <> "String" Then
If delRange Is Nothing Then
Set delRange = .Rows(i)
Else
Set delRange = Union(delRange, .Rows(i))
End If
End If
Next i
If Not delRange Is Nothing Then delRange.Delete
End With
End Sub
NOTE:我假设一个单元格的值如下
String
aaa
bbb
ccc
String
例如,如果您遇到“字符串”可能处于不同情况或位于其他字符串之间的情况
String
aaa
STRING
ccc
dddStringddd
那么您将不得不采取稍微不同的方法,如该链接所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)