2013-05-14 33 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