2013-05-14 58 views
1

因此,基本上, 我需要删除所有没有3作为主键字段中第二个数字的记录,例如可以查看这样删除主键中没有#3的所有行作为开始

#39001 

或无#3

我想要的是具有非#3开始,其行被删除 所有单元格,我想出了下面的代码, 它消除了一些非#3,但不是全部。 我有超过13000行扫描

Sub keep3() 
' 
' RemoveNum Macro 
Dim i As Integer 

For i = 2 To 14000 

If InStr(Cells(i, 2), "3") = 2 Then 

Else 
Rows(i).EntireRow.Delete 
End If 
Next i 
End Sub 

如果你能在正确的方向指向我,我会很感激!

谢谢!

+0

这是http://stackoverflow.com/questions/16552173/must-remove-first-character-of-cell-if-not-3created-loop-副本永无止境/ 16552255#16552255 – steveo40 2013-05-14 21:04:02

+1

与其同一人问你最初提供答案的人是谁:D – Mjall2 2013-05-15 16:18:07

回答

3

当你删除一行时,它下面的所有行向上移动,然后你增加“i”,这实际上会跳过新移动的行。而不是尝试以下...

Sub keep3() 
' 
' RemoveNum Macro 
Dim i As Integer 
i = 2 
While i < 14000 
    If InStr(Cells(i, 2), "3") = 2 Then 
     ' Do nothing 
     i = i + 1 
    Else 
     Rows(i).EntireRow.Delete 
     ' Note - not incrementing i here 
    End If 
Wend 
End Sub 
+0

在你可以使用'If Not Left $(Cells(i,2),2)=“#3”Then''的情况下,它具有更好的性能 – 2013-05-14 18:18:45

+4

另一种方法是让你的For循环从14000转到2步-1。 – dazedandconfused 2013-05-14 18:19:06

+0

14000哈哈我的小原子处理器会出现故障 – Mjall2 2013-05-14 18:21:18

0

2可能性:

删除具有Else线。我认为它会阻止删除以您想要的方式工作。我假设你没有超过14000行的数据....

或者它可能是当你删除该行时,它会扰乱你正在运行的行的顺序。

+0

错了。 '如果...那么**什么也不做**其他**删除行**'。这很糟糕,但这不是问题。问题是关于删除 – 2013-05-14 18:14:57