wake-up-neo.com

Löschen Sie die gesamte Zeile, wenn die Zelle die Zeichenfolge X enthält

Ich bin neu in VBA und versuche, eine Möglichkeit zu finden, alle Zeilen zu löschen (und Zellen nach oben zu verschieben, falls möglich), in denen die Website-Spaltenzelle das Wort none enthält. Die Tabelle enthält mehr als 5000 Datensätze und das würde mir viel Zeit sparen.

Ich freue mich über Vorschläge. Vielen Dank im Voraus!

35
AnchovyLegend

Dies ist keine VBA-Aufgabe - Diese spezielle Aufgabe wird am einfachsten mit dem automatischen Filter erledigt.

1.Autofilter einfügen (Klicken Sie in Excel 2010 auf Start -> (Bearbeiten) Sortieren & Filtern -> Filtern)
2. Filtern Sie in der Spalte "Websites"
3. Markieren Sie das Keinen und löschen Sie diese
4. Filter löschen

71
MBK

OK, ich weiß das für VBA, aber wenn Sie dies für eine einmalige Massenlöschung tun müssen, können Sie die folgenden Excel-Funktionen verwenden: http://blog.contextures.com/archives/2010/06/21/fast -weg-zu-finden-und-löschen-Excel-Zeilen / Hoffe, das hilft jedem

Beispiel für die Suche nach der Zeichenfolge "Papier":

  1. Geben Sie in dem Dialogfeld Suchen und Ersetzen "Papier" in dem Feld Suchen nach ein.
  2. Klicken Sie auf Alle suchen, um eine Liste der Zellen mit "Papier" anzuzeigen.
  3. Wählen Sie ein Element in der Liste aus und drücken Sie Strg + A, um die gesamte Liste und alle "Papier" -Zellen im Arbeitsblatt auszuwählen.
  4. Klicken Sie auf der Registerkarte Start des Menübands auf Löschen und dann auf Blattzeilen löschen.
17
Barry Carter

Gehen Sie auf der Registerkarte "Entwickler" zu "Visual Basic" und erstellen Sie ein Modul. Kopieren Sie und fügen Sie Folgendes ein. Denken Sie daran, den Code zu ändern, je nachdem, was Sie möchten. Führen Sie dann das Modul aus.

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow: Geben Sie die Anzahl der Zeilen ein, die die aktuelle Datei enthält.

Die Zahl "5" in "If" steht für die fünfte (E) Spalte

8
Apolo Radomer

Ich möchte die Antwort von @ MBK ergänzen. Obwohl ich die Antwort von @ MBK als sehr hilfreich bei der Lösung eines ähnlichen Problems empfand, ist es besser, wenn @MBK einen Screenshot zum Filtern einer bestimmten Spalte enthält. enter image description here

6
palmbardier

Dies wurde in einem anderen Kommentar angedeutet, aber Sie könnten so etwas versuchen.

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

Ich habe dies nicht getestet und es stammt aus dem Speicher, daher ist möglicherweise eine Feinabstimmung erforderlich, aber es sollte die Arbeit erledigen, ohne Tausende von Zeilen durchlaufen zu müssen. Sie müssen den 11. Juli entfernen, damit UsedRange korrekt ist, oder den Versatz in 2 Zeilen anstelle von 1 in .Offset(1,0) ändern.

Im Allgemeinen, bevor ich .Delete Mache, starte ich das Makro mit .Select Anstelle von "Löschen". Auf diese Weise kann ich sicher sein, dass der richtige Bereich gelöscht wird Der entsprechende Bereich wird gelöscht.

1
Soulfire

Versuche dies ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
0
matzone