结合多个For While While效率vba循环

我有一个基于项目#(A列)的垃圾销售macros。 正如您在下面的代码中看到的,有很多垃圾(需要删除的行)项目编号,以“40-xxxxx”开头。 我想结合这些循环,以便macros将删除以“40-xxxxx”,“40-00017”和“40-00004”开头的所有项目#。

sItem = Cells(I, 1) Do While Left(sItem, 8) = "40-00087" 'labor-annual refinish Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 1) Loop Next I For I = 2 To nRowMax sItem = Cells(I, 1) Do While Left(sItem, 8) = "40-00076" 'CONNOISSEURS CLOTH Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 1) Loop Next I For I = 2 To nRowMax sItem = Cells(I, 1) Do While Left(sItem, 8) = "40-00007" 'labor jewelery Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 1) Loop Next I For I = 2 To nRowMax sItem = Cells(I, 1) Do While Left(sItem, 8) = "40-00073" 'foam cleaner blitz Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 1) Loop Next I For I = 2 To nRowMax sItem = Cells(I, 1) Do While Left(sItem, 8) = "40-00084" 'labor-razny 1st Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 1) Loop Next I For I = 2 To nRowMax sItem = Cells(I, 5) Do While Left(sItem, 2) = "GC" 'gift cards Rows(I).Select Selection.Delete shift:=xlUp sItem = Cells(I, 5) Loop Next I 

尝试这个。 当删除行而不是重置单元格时,更容易向后循环

 Sub x() Dim i As Long, nRowMax As Long For i = nRowMax To 2 Step -1 If Left(Cells(i, 1), 6) = "40-000" Then If Cells(i, 1).Value <> "40-00017" And Cells(i, 1).Value <> "40-00004" Then Cells(i, 1).EntireRow.Delete shift:=xlUp End If End If Next i End Sub 

改为使用filter。 您也可以使用macroslogging器。 更简单,更快捷。