2017-03-01 59 views
0

我已将几百个XML文件合并在一起,但我有几列有“CCI-”,后面跟着一些数字。我需要保留所有包含字母CCI列的行。我试过这段代码,但它不起作用。有人能帮我一下吗?谢谢搜索整个Excel工作表并删除没有包含短语的单元格的所有行

Sub KeepOnlyAtSymbolRows() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lastRow As Long 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 


    Set rng = ws.Range("A3:E70000") 

    ' filter and delete all but header row 
    With rng 
     .AutoFilter Field:=1, Criteria1:="CCI*" 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    ' turn off the filters 
    ws.AutoFilterMode = False 
End Sub 
+0

如果您_“需要保留所有包含字母为CCI的列的行。”_然后更改Criteria1:= CCI * “'to'Criteria1:=”<> CCI *“' – user3598756

+0

CCI不在整个列中。 –

+0

将“CCI *”更改为“<> CCI *”将删除第3行以外的每一行。 –

回答

0

遍历所有列,以排除细胞“CCI”

坚持你原来的代码,你可以采用:

Sub KeepOnlyAtSymbolRows() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lastRow As Long 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 


    Set rng = ws.Range("A3:E70000") 
    Dim col As Range 

    ' filter and delete all but header row 
    With rng 
     For Each col In .Columns 
      .AutoFilter Field:=col.Column, Criteria1:="<>CCI*" 
     Next 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    ' turn off the filters 
    ws.AutoFilterMode = False 
End Sub 

虽然重构可以是:

Option Explicit 

Sub KeepOnlyAtSymbolRows() 
    Dim col As Range 

    With ActiveWorkbook.Sheets("Sheet1") 
     With .Range("E3", .cells(.Rows.Count, "A").End(xlUp)) '<--| row 3 must be "header" one 
      For Each col In .Columns 
       .AutoFilter Field:=col.Column, Criteria1:="<>CCI*" 
      Next 
      If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
     End With 
     .AutoFilterMode = False ' turn off the filters 
    End With 
End Sub 
+0

@SeanKirkpatrick,在这里你可以看到两种不同的代码:第一种保持尽可能接近原始的代码,第二种显示一些重构使其更加健壮(尤其是使用'If Application.WorksheetFunction.Subtotal( ...'部分,只要存在某些东西,就可以确保删除了某些东西)如果它解决了您的问题,您可能希望将其标记为已接受,方法是单击答案旁边的复选标记以将其从灰色变为填充。谢谢 – user3598756

+0

User3698756-我得到了Range类失败错误的AutoFilter方法。 –

+0

Diego。谢谢你,你的代码工作得很好。 –

0

它不工作,因为你使相反的自动过滤器。它应该是:

Sub KeepOnlyAtSymbolRows() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lastRow As Long 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 


    Set rng = ws.Range("A3:E70000") 

    ' filter and delete all but header row 
    With rng 
     .AutoFilter Field:=1, Criteria1:="<>*CCI**" 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    ' turn off the filters 
    ws.AutoFilterMode = False 
End Sub 
+0

@SeanKirkpatrick在你写的评论_“CCI不在整个同一列”_:如果这是真的,那么这段代码将不起作用,因为它只会过滤第一列 – user3598756

+0

@ user3598756那不是因为自动过滤器应用于'rng'变量(A3:E7000)。该代码表示​​应该在该范围的第一列(字段1)中查看标准。 –

+1

这正是我写的,你的代码只是过滤'rng'的第一列。 SeanKirkpatrick写道:“CCI不在整个同一专栏中”。他一定是错的,但是不好意思承认 – user3598756

相关问题