Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
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

VBA Zeilen löschen beschleunigen

VBA Zeilen löschen beschleunigen
Frank
Hallo zusammen,
ich benutze folgenden Code, um Zeilen zu löschen, in deren Spalte "B" ein Wert steht, der in einer zuvor definierten Range auftaucht:
Sub cust_del()
Application.ScreenUpdating = False
Dim i As Integer
Dim lz As Integer
Worksheets("ergebnis").Activate
lz = Range("A4").End(xlDown).Row
For i = 4 To lz
If WorksheetFunction.CountIf(Range("DEL_CUST"), Cells(i, 2)) > 0 Then
Rows(i).Delete
i = i - 1
lz = lz - 1
End If
Next i
Application.ScreenUpdating = True
End Sub
Da ich mehrere tausend Zeilen überprüfen muß, dauert das ganz schön lange. Besteht die Möglichkeit das eleganter und beschleunigter zu machen? Vielleicht so, das erstmal alle zu löschenden Zeilen nur markiert werden und der eigentliche Löschvorgang nur einmal am Ende ausgeführt wird?! Wie wäre dann die Syntax?
Vielen Dank,
Frank

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Zeilen löschen beschleunigen
29.03.2011 11:11:55
ptonka
Hallo Frank,
ich mach dies immer mit der Suchfunktion - das geht meistens schneller.
Hier ein Beispiel, wie ich es mal umgesetzt habe.
Vielleicht kannst Du das für Deine Bedürfnisse anpassen.
Sub löschen()
LZ = Range("A4").End(xlDown).Row
For j = 1 To LZ
Sheets("MeinBlatt").Select
Call Suche
If Suchergebnis = "ok" Then
ActiveCell.Select
Zeile = ActiveCell.Row
Rows(Zeile).Delete
End If
Next j
End Sub

Sub Suche()
On Error GoTo weiter
Cells.Find(What:="B", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Suchergebnis = "ok"
GoTo ende
weiter:
Suchergebnis = "leer"
ende:
End Sub
Gruß
Ptonka
Anzeige
dankeschön! das geht!
29.03.2011 12:04:53
Frank
-
erst sammeln, dann löschen
29.03.2011 12:22:28
Rudi
Hallo,
Sub cust_del()
Dim i As Integer
Dim lz As Integer
Dim rDel As Range
Application.ScreenUpdating = False
With Worksheets("ergebnis")
lz = .Range("A4").End(xlDown).Row
For i = 4 To lz
If WorksheetFunction.CountIf(Range("DEL_CUST"), .Cells(i, 2)) > 0 Then
If rDel Is Nothing Then
Set rDel = .Cells(i, 1)
Else
Set rDel = Union(rDel, .Cells(i, 1))
End If
End If
Next i
End With
If Not rDel Is Nothing Then rDel.EntireRow.Delete
Application.ScreenUpdating = True
End Sub

Gruß
Rudi

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige