Effiziente Methode zum Löschen der gesamten Zeile, wenn die Zelle kein '@' [Duplikat] enthält

8

Ich erstelle ein schnelles Sub, um eine Gültigkeitsprüfung für E-Mails durchzuführen. Ich möchte ganze Zeilen von Kontaktdaten löschen, die kein '@' in der Spalte 'E' enthalten. Ich habe das folgende Makro verwendet, aber es funktioniert zu langsam, weil Excel alle Zeilen nach dem Löschen bewegt.

Ich habe versucht, eine andere Technik wie diese: set rng = union(rng,c.EntireRow) , und danach löschen den gesamten Bereich, aber ich konnte nicht verhindern, Fehlermeldungen.

Ich habe auch damit experimentiert, jede Zeile zu einer Auswahl hinzuzufügen und nachdem alles ausgewählt wurde (wie in Strg + Auswahl) und anschließend gelöscht wurde, aber ich konnte die entsprechende Syntax dafür nicht finden.

Irgendwelche Ideen?

%Vor%     
Parseltongue 03.06.2013, 16:27
quelle

5 Antworten

16

Sie brauchen dazu keine Schleife. Ein Autofilter ist viel effizienter. (ähnlich der Cursor-WHERE-Klausel in SQL)

Autofilter alle Zeilen, die nicht "@" enthalten und löschen Sie sie dann wie folgt:

%Vor%

HINWEISE:

  • .Offset(1,0) verhindert das Löschen der Titelzeile
  • .SpecialCells(xlCellTypeVisible) gibt die Zeilen an, die verbleiben, nachdem der Autofilter angewendet wurde
  • .EntireRow.Delete löscht alle sichtbaren Zeilen mit Ausnahme der Titelzeile

Durchlaufen Sie den Code und Sie können sehen, was jede Zeile macht. Verwenden Sie F8 im VBA-Editor.

    
Jon Crowell 03.06.2013, 16:44
quelle
3

Haben Sie einen einfachen automatischen Filter mit " @ " als Kriterium versucht, dann verwenden Sie

%Vor%

Hinweis: Es gibt Sterne vor und nach dem @, aber ich weiß nicht, wie man sie aussortiert!

    
JosieP 03.06.2013 16:57
quelle
2

Unter Verwendung eines Beispiels, das vom Benutzer shahkalpesh bereitgestellt wurde, habe ich das folgende Makro erfolgreich erstellt. Ich bin immer noch neugierig auf andere Techniken (wie die von Fnostro, in denen Sie Inhalt löschen, sortieren und löschen). Ich bin neu in VBA, also wären alle Beispiele sehr hilfreich.

%Vor%     
Parseltongue 03.06.2013 16:55
quelle
1

Wenn Sie mit vielen Zeilen und vielen Bedingungen arbeiten, sollten Sie diese Zeilenlöschmethode besser verwenden

%Vor%     
user2140173 11.06.2013 14:54
quelle
0

Anstatt jede Zelle einzeln zu loopen und zu referenzieren, fassen Sie alles und legen Sie es in ein variantes Array; Dann wiederhole das Varianten-Array.

Starter:

%Vor%

Der echte Arbeiter:

%Vor%     
Profex 10.12.2013 00:06
quelle

Tags und Links