2017-10-09 96 views
0

我有一个宏,它根据项目#(列A)取出垃圾销售。正如您在下面的代码中看到的,有很多垃圾(需要删除的行)项目编号以“40-xxxxx”开头。我想结合这些循环,以便宏将删除以“40-xxxxx”开头的所有项目#除外“40-00017”&“40-00004”。结合多个For While While循环提高效率vba

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 

回答

2

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

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 
+0

不得不说,尽管用@ Coffeegrinder的方法(只要你没有任何空白行)。 – SJR

1

改为使用过滤器。你也可以使用宏记录器。更简单,更快捷。