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

Rechenzeit

Rechenzeit
28.11.2016 11:10:26
Rust
Guten Tag,
ich habe folgendes Problem: Mein Algoithmus löscht auf Basis von Vergleichen ein paar Zeilen aus einem Arbeitsblatt:
With ZielDatei.Worksheets("Baseline")
'While ZielDatei.Worksheets("Baseline").Cells(i, 1) ""
While .Cells(i, 1) ""
gefunden = False
For j = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(j) = True Then
If UserForm1.ListBox1.List(j, 0) = .Cells(i, 1) Then
If UserForm1.ListBox1.List(j, 1) = .Cells(i, 2) Then
If UserForm1.ListBox1.List(j, 2) = .Cells(i, 3) Then
gefunden = True
End If
End If
End If
End If
Next j
If gefunden = False Then
.Rows(i).Delete
i = i - 1
''AnzahlZeilenBaseline = AnzahlZeilenBaseline - 1
End If
i = i + 1
Wend
End With
Die entscheidende Stelle, die dabei so ewig dauert (teilweise 45 Minuten) ist .rows(1).delete, es warden aber nie mehr als 8000 Zeilen gelöscht. Wenn man nur schnell ein Programm schreibt, das 8000 Zeilen löscht, dann dauert das nie mehr als ein paar Sekunden. Ich verstehe nicht, warum das Zeilen-Löschen in Verbindung mit dem oben ersichtlichen Algorithmus dann so lange dauert.
Vielen Dank.

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

Betreff
Datum
Anwender
Anzeige
AW: Rechenzeit
28.11.2016 11:22:32
Daniel
Hi
jedes Löschen einer Zeile löst in Excel eine Reihe von Aktionen aus, die viel Zeit benötigen.
beschleunigen kann man das in dem man alle Zeilen, die gelöscht werden sollen, als einen lückenlosen Block löscht, dann nämlich kann Excel diese Aktionen für alle Zellen in einem Schritt ausführen.
dh Range("1:1000").Delete braucht genauso lange, wie Range("1:1").Delete, aber Range("1:1,3:3") braucht doppelt so lange.
eine andere alternative zum Löschen von Zeilen wäre, dass man alle Zeilen, die gelöscht werden sollen in einer Hilfspalte mit einem gleiche Wert kennzeichnet (z.B. 0) und alle Zellen die stehen bleiben müssen mit einem Individuellen Wert (z.b. der Zeilennummer in Form der Funktion ZEILE())
dann löscht man die Zeilen mit der Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN und der Hilfsspalte als Kriterium.
Dieses ist wiederum sehr schnell, weil es die o.g. Aktionen nicht ausführt.
in deinem Fall könntest du die selektierten Werte aus der Listbox in eine eigene Tabelle schreiben und dann die Kennzeichungsformel mit ZählenWenns erstellen.
Gruß Daniel
Anzeige
AW: Rechenzeit
01.12.2016 14:59:41
Rust
Ich verstehe nicht, wieso das Löschen von 8000 Zeilen mit .rows(I) delete als Algorithmus alleine nur wenige Sekunden dauert, in dem Algorithmus ob jedoch 40 Minuten.
AW: Rechenzeit
01.12.2016 15:01:04
Rust
Ich meinte in dem Algorithmus, den ich eingefügt habe, dauert es 40 Minuten, als Algorithmus alleine nur wenige Sekunden. Danke

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige