2017-09-27 3 views
-2

私は、それぞれ約2000行の4つのExcelファイルを持っています。 列には、いくつかの4文字の文字列があります。リストと異なる値の行を削除する

は、私が始まるコードを持つものを除くすべての行を削除する:

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

ずつをフィルタリングするための非常に多くのがあります1つ、私はマクロがより良い解決策になると思います。

私のコードは、これ一つであり、だけではなく、すべての興味深いもののB値を残している:

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

あなたがそれを行うだろうか?

+2

このコードを試してみてください。 Stack Overflowは、コード・フォー・ユー・サービスではなく、コラボレーション・ウェブサイトです。開始に役立つ必要がある場合は、Excelの開発者タブでマクロレコーダーを使用してください。ループの側面については、動的最終行、Forループ、For Eachループのいずれかを調べます。 – Cyril

+0

申し訳ありません、コードを編集しました。私のアプローチは、で始まる通常のフィルタです:しかし、それは明らかに2つのパラメータを明らかに許可します。 –

+0

ここで提供されているソリューションを使用して、不要な行を削除してください。https://stackoverflow.com/questions/36873359/fastest-way-to-deleterows-which-cannot-be-grabbed-with-特別なセル – 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の部分を捨てたければ、それを左ではない(...)にすることができます。これは、あなたが列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ñoEdit2をチェックします。削除すると、 LRを2 Step -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 

リガードの上ご確認ください必要がある各シートインチ

関連する問題