我试图删除使用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
答案 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