Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1404to1408
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

Schleife zu langsam

Schleife zu langsam
05.02.2015 14:29:49
Plagiat1312
Hallo,
Folgender Code soll in einem Blatt zum Einsatz kommen, dass über das Jahr hinweg auf über 100.000 Zeilen anwachsen wird (meine pers. Annahme). Die Prozedur dauert bei den bereits vorhanden Zeilen von ca 48.000 bereits geraume Zeit und daher die Frage an euch Experten: `
Wie kann ich den Code aus Performance Perspektive verbessern?

Sub Monatswerteloeschen()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim i As Long, LZeilenAnzahl As Long, SpalteMonat As Long
LSpalteMonat = 7
LZeilenAnzahl = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows. _
Count)
With ActiveSheet
For i = LZeilenAnzahl To 20 Step -1
If .Cells(i, 9).Value = .Cells(1, LSpalteMonat).Value Then .Rows(i).Delete
Next
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Danke im voraus!
Gruß
Plagiat1312

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

Betreff
Datum
Anwender
Anzeige
AW: Schleife zu langsam
05.02.2015 14:34:19
yummi
Hallo Plagiat,
im ersten Durchlauf nur die zu löschenden Zeilen markieren und dann nach markierung filtern und einmal löschen.
Gruß
yummi

AW: Schleife zu langsam
05.02.2015 17:31:53
Peter
Hallo Plagiat,
versuche es so:
Option Explicit
Sub Monatswerteloeschen()
Dim lZeile         As Long
Dim lZeilenAnzahl  As Long
Dim lSpalteMonat   As Long
Dim rZeile         As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
lSpalteMonat = 7
lZeilenAnzahl = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.  _
_
Count)
With ActiveSheet
For lZeile = 20 To lZeilenAnzahl
If .Cells(lZeile, 9).Value = .Cells(1, lSpalteMonat).Value Then
If rZeile Is Nothing Then
Set rZeile = Rows(lZeile)
Else
Set rZeile = Union(rZeile, Rows(lZeile))
End If
End If
Next lZeile
End With
If Not rZeile Is Nothing Then rZeile.Delete
Set rZeile = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Gruß Peter

Anzeige
AW: Zeilen löschen immer ohne Schleife!
05.02.2015 14:55:21
Daniel
Hi
eine einfache und zugelich sehr schnelle Methode zum Löschen von Zeilen mit Bedingung ist folgende:
1. Schreibe in eine Hilfsspalte am Tabellenende eine Formel, welche alle Zeilen, die gelöscht werden sollen mit 0 kennzeichnet und die anderen mit der akuellen Zeilennummer
2. schreibe in die erste Zeile der Hilfsspalte ebenfalls die 0 (in der Überschriftenzeile)
3. Wende auf die Tabelle die Funktion DATEN - DATENTOOLS - DUPLIATE ENTFERNEN mit der Hilfsspalte als Kriterium und der Option "keine Überschrift" an
4. lösche die Hilfsspalte wieder.
je nachdem wie schnell du beim Tippen der Formel bist, erledigst du so die Aufgabe von Hand schneller als dein Makro.
das geht natürlich auch als Makro
dim sp as long
dim ze as long
ze = Cells.specialCells(xlcelltypelastcell).Row
sp = Cells.SpecialCells(xlcelltypelastcell).Column + 1
With Range(Cells(19, sp), Cells(ze, sp))
.FormulaR1C1 = "=IF(RC9=R1C " & LSpalteMonat & ",0,ROW())"
.Cells(1, 1).Value = 1
.EntireRow.Removeduplicates .Column, xlno
.ClearContents
End with

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige