Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Effizientes Löschen von bestimmten Zeile

Effizientes Löschen von bestimmten Zeile
27.03.2023 11:54:04
Theo

Hallo liebe Experten,

ich suche eine effektive Methode um bestimmte Zeilen aus einem Worksheet zu löschen. Das Worksheet "Analyse" hat ca 70.000 Zeilen. In der Spalte C steht ein Werkscode (Alphanumerisch). Auf einem anderen Worksheet ("Scope") steht in Spalte A eine Liste von Werkscodes.

Ich möchte jetzt alle Zeilen aus der Analyse Tabelle löschen, bei der das Werk NICHT im Scope genannt ist. Momentan löse ich das, indem ich erst die Werke aus Scope in ein Dictionary lade. Anschliessend gehe ich mit einem Loop durch die Analyse tabelle, verwende Clear contents für alle Zeilen bei denen das Werk nicht im Dictionary vorkommt. Anschliessend sortiere ich die Analyse tabelle. Erfahrungsgemäß ist das deutlich schneller, als wenn ich Zeile für Zeile lösche. Trotzdem bin ich mit der Performance nicht wirklich glücklich.

Vermutlich ist der beste Wege einen Autofilter auf alle Werke zu setzen, die nicht in der Liste vorkommen, und dann mittels UsedRange alles auf einen Schlag zu löschen. Ich habe aber noch keinen guten Weg gefunden, die Autofilterkriterien zu setzen.

Hat jemand eine Idee (oder code :-) )?
Die anghängte Datei zeigt nur die Struktur der Datei. Den Code habe ich Euch erspart :-)
https://www.herber.de/bbs/user/158458.xlsx

Danke schon mal

Theo



5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Effizientes Löschen von bestimmten Zeile
27.03.2023 12:00:21
Daniel
HI
ich verwende in der Regel das hier:
1. markiere in einer Hilfsspalte per Formel alle Zeilen, die gelöscht werden sollen mit 0 und die die Stehenbleiben sollen, mit der Zeilennummer:
=Wenn(Bedingung für Löschen; 0; Zeile())
2. schriebe in die Überschriftenzeile der Hilfsspalte die 0
3. Wende auf die ganze Tabelle die Menüfunktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an, mit der HIlfsspalte als Kriterium
4. lösche die Hilfsspalte.

oder dieser Weg.
1. markiere auch wieder per Formel für löschen, aber diesmal mit 1 für löschen und "" für stehen bleiben
2. kopiere die Hiflsspalte und füge an gleicher Stelle als Wert ein.
3. sortiere die Liste nach der HIlfssplalte
4. markiere in der Hilfsspalte alle 1 (Inhalte auswählen - Werte - Zahlen
5. lösche jetzt diese Zellen mit der Option "ganze Zeile"

das sollte eigentlich das schnellste sein, wenn man es per Makro ausführt. Das zweite ist noch etwas schneller als das Erste.

Gruß Daniel


Anzeige
AW: Effizientes Löschen von bestimmten Zeile
27.03.2023 12:07:52
Daniel
Die Formel wäre:

=Wenn(Zählenwenn(Scope!$A$2:$A$8;B1)=0;0;Zeile())

bzw

=Wenn(Zählenwenn(Scope!$A$2:$A$8;B1)=0;1;"")

der Code für variante 1:

With Sheets("Analyse").UsedRange
    with .Columns(.columns.Count + 1)
        ´.FormulaR1C1 = "=IF(CountIf(Scope!R2C1:R8C1,RC2)=0,0,Row())"
         .Cells(1, 1).value = 0
         .EntireRow.RemoveDuplicates .column, xlno
          .ClearContents 
       end with
end with
Gruß Daniel


AW: Effizientes Löschen von bestimmten Zeile
27.03.2023 12:51:38
GerdL
Hallo Theo!

Noch ein Gedicht.
Sub Unit()

    'Hilfsspalte = H (=8)
    
    With Worksheets("Analyse")
        With .Cells(1, 1).Resize(.Cells(.Rows.Count, 3).End(xlUp).Row, 8).Cells
            With .Columns(8)
                .FormulaR1C1 = "=IF(COUNTIF(Scope!R2C1:R8C1,RC3)=0,0,ROW())"
                .Formula = .Value
            End With
            .RemoveDuplicates Columns:=8, Header:=xlNo
            .Columns(8).Clear
        End With
    End With


End Sub
Gruß Gerd


Anzeige
AW: Effizientes Löschen von bestimmten Zeile
27.03.2023 12:56:11
Daniel
das ist doch genau das, was ich grad eben beschrieben habe.
ich habe halt noch die letzte Spalte dynamisiert, so dass sich der Code hier automatisch anpasst (falls mal Spalten dazukommen)
Gruß Daniel


AW: Effizientes Löschen von bestimmten Zeile
27.03.2023 13:07:29
GerdL
EntireRow
UsedRange
Das Gleiche ist nicht immer das Selbe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige