2017-03-01 31 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

相關問題