2011-09-02 59 views
2

我的任務是如果K列中有零值,我必須刪除整行。首先我想到的是循環但我有4000行,1000行可能有K值爲零。這些VBA代碼的錯誤是什麼?

Sub DeleteRowWithContents() 
     Last = Cells(Rows.Count, "D").End(xlUp).Row 
     For i = Last To 1 Step -1 
      If (Cells(i, "K").Value) = 0 Then 
       Cells(i, "A").EntireRow.Delete 
      End If 
     Next i 
End Sub 

我相信人們都說它的時間正在循環。這就是爲什麼我認爲更好的去接下來的方法,人們也告訴我'查找'比循環快得多。因此,我已用下面的代碼,我發現,當我使用Google

​​3210

但是我發現上面的代碼,它也被刪除行,如果k個列中有10或20個值。我的意思是如果數字包含零,那麼它的刪除

的例子。

204 or 200 or 205 or 301 or 10 \ Its deleting all these rows 

這些代碼有什麼問題?這些代碼比我想要使用的循環太快,但是我發現它有問題。

請解釋錯誤原因。如果在K列中除了循環以外還有零值,或者(也可能循環應該太快),那麼對於刪除行更快的其他方法有幫助?這將不勝感激。由於

回答

4

並非是錯誤,在查找方法添加此參數

注視:= xlwhole

要使用過濾器不

Sub FilterAndDelete() 
'Developer by Bruno Leite 
'http://officevb.com 

    Dim Sht As Worksheet 
    Dim FilterRange As Range 
    
    'Set your Sheet 
    Set Sht = ThisWorkbook.Sheets("Plan2") 
    
    'Verify if is Filter 
    If Sht.FilterMode Then 
      Sht.ShowAllData 
    End If 
    
    'Filter Column A with 0 at parameter 
    Sht.Range("A:A").AutoFilter Field:=1, Criteria1:="0" 
    
    'Define Range Of Visible cells without row title 
    Set FilterRange = Sht.Range("A1").CurrentRegion.Offset(1, 0).SpecialCells(xlCellTypeVisible) 
        
    Application.DisplayAlerts = False 
    
    FilterRange.Rows.Delete 
    
    Application.DisplayAlerts = True 
        
    Sht.ShowAllData 
    
End Sub 
+0

不就是是不是我想是因爲它即使不工作的bug但是,謝謝布魯諾:) – niko

+0

其他方式是使用過濾方法和刪除可見的單元格。 –

+0

你認爲哪個更快的過濾器或Find?我相信過濾器是對的? – niko