我已将几百个XML文件合并在一起,但我有几个列有a" CCI - "其次是一些数字。我需要保留包含字母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")
' 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 :(得分: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
答案 1 :(得分:0)
遍历所有列以排除带有&#34; CCI&#34;
坚持原始代码,你可以采用:
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