Zeilen löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Zeilen löschen
von: tom
Geschrieben am: 16.10.2015 13:02:48

Hallo,
ich habe mir ein Makro erstellt, dass in Spalte 19 alle Zeilen durchsucht, in denen x steht und diese löscht.

Sub Schaltfläche7_Klicken()
 Dim i As Long
   Application.ScreenUpdating = False
   
   For i = Cells(Rows.Count, 19).End(xlUp).Row To 1 Step -1
      If Cells(i, 19) = "x" Then Rows(i).Delete
   Next i
   Application.ScreenUpdating = True
   
MsgBox ("x gelöscht"), vbExclamation
End Sub
Leider dauert dies sehr lang. Ich denke das Problem ist, dass es von ganz unten alle Zeilen ab 1.040.000 durchsucht.
Gibt es eine Möglichkeit, dass das Makro ab dem ersten Wert von unten in Spalte 19 sucht?
Viele Grüße

Bild

Betrifft: AW: Zeilen löschen
von: selli
Geschrieben am: 16.10.2015 13:09:35
hallo tom,
Gibt es eine Möglichkeit, dass das Makro ab dem ersten Wert von unten in Spalte 19 sucht?
genau das macht dein makro ja.

Sub Schaltfläche7_Klicken()
 Dim i As Long
   Application.Calculation = xlCalculationManual
   Application.ScreenUpdating = False
msgbox   Cells(Rows.Count, 19).End(xlUp).Row
   For i = Cells(Rows.Count, 19).End(xlUp).Row To 1 Step -1
      If Cells(i, 19) = "x" Then Rows(i).Delete
   Next i
   Application.ScreenUpdating = True
   Application.Calculation = xlCalculationAutomatic
MsgBox ("x gelöscht"), vbExclamation
End Sub

ich habe mal zu beginn auch die automatische berechnung ausgeschaltet und eine msgbox hinzugefügt, damit du sehen kannst in welcher zeile begonnen wird.
gruß
selli

Bild

Betrifft: AW: Zeilen löschen
von: tom
Geschrieben am: 16.10.2015 13:40:15
Okay, danke. Dachte es fängt ganz unten an zu suchen.
Das passt also, aber schneller ist es leider noch nicht wirklich geworden.
Gibt es da überhaupt eine Möglichkeit?
Viele Grüße

Bild

Betrifft: AW: Zeilen löschen
von: hary
Geschrieben am: 16.10.2015 13:47:12
Moin
Klar. Mach es mit Filter als VBAcode.
Frei nach dem Motto:
Filter in Spalte(19) setzen/nach "x" filtern/Specialcells(xlvisible).entirerow.delete
gruss hary

Bild

Betrifft: AW: Zeilen löschen
von: tom
Geschrieben am: 16.10.2015 14:04:42
Aha, gute Idee, hast du zur Umsetzung genaueres?
Viele Grüße

Bild

Betrifft: AW: Zeilen löschen
von: hary
Geschrieben am: 16.10.2015 14:20:35
Moin
Hab im Moment kein Excel. Probier mal:

Dim Zeile As Long
Zeile = Cells(Rows.Count, 19).End(xlUp).Row
With ActiveSheet.Range("S1:S" & Zeile)
 .AutoFilter Field:=1, Criteria1:="x"
 .SpecialCells(xlVisible).EntireRow.delete
End With

gruss hary

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 16.10.2015 17:09:37
Hi
seit 2007 ist die von mir präferierte Methode zum löschen von Zeilen das Duplikate-Entferenen aus den Datentools.
ist schnell, einfach programmiert, bei bedarf auch ohne Makro von Hand ausgeführt.
hierzu schreibt man in die erste freie Spalte am Tabellenende eine Formel, welche alle Zeilen, die gelöscht werden sollen mit 0 und die die stehenbleiben müssen mit der Zeilennummer kennzeichnet.
das wäre in deinem Fall: =Wenn(S1="x";0;Zeile())
in die erste Zeile der Hilfsspalte (dies ist ja normalerweise die Überschrift) kommt ebenfalls die 0 (immer)
dann wendet man das Duplikate-Entfernen an mit der Hilfsspalte als Kriterium und der Option "keine Überschrift".
sieht als Code so aus:

With ActiveSheet.Usedrange
    With .columns(.columns.count + 1)
        .FormulaR1C1 = "=IF(RC19=""x"",0,Row())"
        .Cells(1, 1).value = 0
        .EntireRow.RemoveDuplicates .column, xlno
        .clearContents
    end with
end with
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeilen löschen"