Excel删除数量仅为零的行

时间:2014-01-30 14:57:43

标签: vba

我试图删除使用VBA只有一个数量为“0”的行,但我正在使用的代码是删除数量中“0”的所有内容。将删除600,因为它有一个“0”

以下代码。

Sub DeleteRows()
    Dim c As Range
    Dim SrchRng

    Set SrchRng = ActiveSheet.Range("G1", ActiveSheet.Range("G65536").End(xlUp))
    Do
        Set c = SrchRng.Find("0", LookIn:=x1Values)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
End Sub

3 个答案:

答案 0 :(得分:3)

改变这个:

Set c = SrchRng.Find("0", LookIn:=x1Values)

对此(添加LookAt参数并更正LookIn参数中的拼写错误):

Set c = SrchRng.Find("0", LookIn:=xlValues, LookAt:=xlWhole)

Documentation for the Range.Find method,提供有关可选参数的一些信息。

但是,我认为range.find方法很昂贵。简单的迭代可能会更快:

Sub DeleteRows()
    Dim c As Range
    Dim i as Long
    Dim SrchRng

    Set SrchRng = ActiveSheet.Range("G1", ActiveSheet.Range("G65536").End(xlUp))
    Application.ScreenUpdating = False
    For i = SrchRng.Cells.Count to 1 Step -1
        Set c = SrchRng.Cells(i)
        If c.Value = "0" Then c.EntireRow.Delete
    Next
    Application.ScreenUpdating = True
End Sub

答案 1 :(得分:1)

您需要添加一个选项:

Set c = SrchRng.Find("0", LookIn:=xlValues, LookAt:=xlWhole)

查看“整个”单元格

答案 2 :(得分:0)

如果你有一个大数据集,这很快

Sub DeleteRows()

Application.DisplayAlerts = False

Dim ws As Excel.Worksheet
Dim lCol As Long
Dim lRow As Long

Set ws = ThisWorkbook.Sheets("mySheetName")

 lCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
 lRow = ws.Range("G" & ws.Rows.Count).End(xlUp).Row

With ws
  .AutoFilterMode = False
  .Range("A1", Cells(lRow, lCol)).Cells.AutoFilter
  .Range("A1", Cells(lRow, lCol)).Cells.AutoFilter Field:=7, Criteria1:="0"
  .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete
  .AutoFilterMode = False
  .Range("A1").End(xlDown).Offset(1).Resize(ActiveSheet.UsedRange.Rows.Count).EntireRow.Delete
End With

Application.DisplayAlerts = True

End Sub