【发布时间】:2013-12-19 23:47:35
【问题描述】:
对不起,如果这很简单,这是我第一次尝试 VBA。
所以我希望这个宏删除我不需要的行,并且对于每个实体,它都有一个总字段(大约每 20 条记录左右),我制作了这个脚本:
Dim i As Integer
Dim LastRow As Integer
LastRow = Range("A65536").End(xlUp).Row
For i = 3 To LastRow
If Range("C" & i) = "Result" Then
Rows(i & ":" & i).Select
Selection.Delete Shift:=x1Up
End If
Next
而且效果很好!然后我尝试了类似的事情。我尝试遍历数据集中的每一行(记录),然后如果某个字段不包含字符串“INVOICE”,那么我不需要该行,我可以删除它.所以我只是添加到我当前的循环中(为什么循环两次?)所以现在看起来像这样:
Dim i As Integer
Dim LastRow As Integer
LastRow = Range("A65536").End(xlUp).Row
For i = 3 To LastRow
If Range("C" & i) = "Result" Then
Rows(i & ":" & i).Select
Selection.Delete Shift:=x1Up
End If
If Not InStr(1, Range("Q" & i), "INVOICE") Then
Rows(i & ":" & i).Select
Selection.Delete Shift:=x1Up
End If
Next
据我所知,第二位只是随机开始删除行,没有押韵或理由。 Q 字段不包含发票的行有时会保留有时会消失,如果包含发票则相同。知道我做错了什么吗?
【问题讨论】:
-
不要循环播放。使用自动过滤器 :) 见THIS
-
...或者如果您要循环,则从最后一行开始并继续工作 (
For i = LastRow to 3 Step -1),这样您在删除一行时就不会踩到循环索引 (因此向上移动下面的行...)