根据标准删除Excel中的行

我正在找出正确的方法来做到这一点,但我都被搜出了。 我试图search一个包含各种垃圾的列(资产标签),但希望保留以AA开头的整个行,因为这确认该行实际上是资产标签。

下面的代码给了我一个“Object Required”的错误,我相信我可能没有正确地告诉它查看单元格的值,“If rng.Cells(i)”> Left(cell.Value,2)=“AA “那么”声明。 有人能指出我需要做的事情吗?

Sub DeleteRows() Dim rng As Range Dim i As Double, counter As Double Set rng = Range("C:C") i = 1 For counter = 1 To rng.Rows.count If rng.Cells(i) <> Left(cell.Value, 2) = "AA" Then rng.Cells(i).EntireRow.Delete Else i = i + 1 End If Next End Sub 

谢谢!

如果你删除行,那么你应该总是从下往上工作:

 Sub DeleteRows() Dim rng As Range Dim counter As Long, numRows as long With ActiveSheet Set rng = Application.Intersect(.UsedRange, .Range("C:C")) End With numRows = rng.Rows.Count For counter = numRows to 1 Step -1 If Not rng.Cells(counter) Like "AA*" Then rng.Cells(counter).EntireRow.Delete End If Next End Sub 

鉴于你的代码花了5分钟,我build议你尝试这种自动过滤方法。 它使用一个工作列(第一个未使用的列部分usedrange)运行一个区分大小写的C列C单元格的前两个字母为“AA”。 如果没有自动filter删除这些行。

  Sub KillnonAA() Dim ws As Worksheet Dim rng1 As Range Dim lRow As Long Dim lCol As Long Set ws = ActiveSheet 'in case the sheet is blank On Error Resume Next lRow = ws.Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row lCol = ws.Cells.Find("*", , xlValues, , xlByColumns, xlPrevious).Column On Error GoTo 0 If lRow = 0 Then Exit Sub Set rng1 = ws.Range(ws.Cells(1, lCol + 1), ws.Cells(lRow, lCol + 1)) Application.ScreenUpdating = False Rows(1).Insert With rng1.Offset(0, 1) .FormulaR1C1 = "=EXACT(LEFT(RC3,2),""AA"")" .AutoFilter Field:=1, Criteria1:="FALSE" .EntireRow.Delete 'in case all records were deleted On Error Resume Next .EntireColumn.Delete On Error GoTo 0 End With Application.ScreenUpdating = True End Sub