2017-09-27 52 views
-2

我有4个excel文件,每个文件大约有2000行。 在一列中,我有几个4个字符的字符串。删除值不同于列表的行

我想删除开始,除了与代码的那些所有行:

E,L,GC,UD,UG,UB,英国,B

有太多通过过滤一个其中一个,我想一个宏将是一个更好的解决方案。

我的代码是这一个,但它仅仅是离开的,而不是所有的有趣的b值:

ActiveSheet.Range("$A$1:$A$1379").AutoFilter Field:=1, Criteria1:=Array("=E*", _ 
    "=GC*", "=UD*", _ 
    "=UG*", "=UB*", _ 
    "=UK*", "=B*"), _ 
    Operator:=xlOr 

那你怎么办呢?

+2

请发布任何你已经试过的代码herefar;堆栈溢出是一个协作网站,而不是代码为您服务。如果您需要入门帮助,请使用Excel的“开发人员”选项卡中的宏记录器。关于循环方面,请查看动态最后一行,For循环和/或For Each循环。 – Cyril

+0

对不起,我现在用代码编辑。我的方法是一个普通的过滤器,以:开始,但它显然允许2个参数。 –

+0

使用此处提供的任何解决方案删除不需要的行:https://stackoverflow.com/questions/36873359/fastest-way-to-delete-rows-which-cannot-be-grabbed-with- specialcells – Ralph

回答

1

您可以使用For循环遍历行,并使用If语句来确定哪些单元格符合条件。这将是一个很长的字符串if语句,但应该工作:

Dim i as Long, LR as Long 
LR = cells(rows.count,1).End(xlUp).Row 
For i = 2 to LR 
    If Left(Cells(i,1).Value,1) = "E" OR Left(Cells(i,1).Value,1) = "L" OR Left(Cells(i,1).Value,2) = "GC" OR Left(Cells(i,1).Value,2) = "UD" OR Left(Cells(i,1).Value,2) = "UG" OR Left(Cells(i,1).Value,2) = "UB" OR Left(Cells(i,1).Value,2) = "UK" OR Left(Cells(i,1).Value,1) = "B" Then 
     'Nothing 
    Else 
     Rows(i).Delete 
    End If 
Next i 

所有的工作都在那个If语句中。如果你想放弃Else部分,你可以使它成为If Not Left(...)。这假设你在第1栏(A)中工作。


编辑

每我留在了岗位,尝试与.Delete代码的新工作表的第二个评论:

Sheets("SOURCENAME").Copy Sheets(Sheets.Count) 

然后,您将在运行环新创建的工作表


EDIT2:

当删除单元格,你想往回走这样的:

For i = LR to 2 Step -1 
    'Stuff 
Next i 
+0

现在的问题是,当我删除单元格时,范围发生变化,因此循环缺少数据。如果单元格A49被删除,则A50的值上移到A49并且从不检查,所以我保留了一些不需要的列 –

+1

@DanielViaño检查编辑2 ...删除时,如果要指定您正在逐步循环负数方向,使LR为2步-1。 – Cyril

1

在每个你需要检查上面

Sub RemoveRows() 

    Dim sh As Long 
    Dim i As Long 

    sh = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 

    For i = 1 To sh 

    ' Checking criteria section:   
    If InStr(1, Cells(i, "A").Value, "E") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "L") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "GC") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "UD") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "UG") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "UB") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "UK") = 1 Then Exit Sub 
    If InStr(1, Cells(i, "A").Value, "B") = 1 Then Exit Sub 

    Cells(i, "A").EntireRow.Delete 

End Sub 

方面表下方运行。