AW: VBA ist langsam
11.04.2008 23:26:39
Daniel
Hi
Zeilen einfügen ist für Excel sehr zeitaufwendig.
was Excel dagegen sehr schnell kann, ist sortieren.
daher bietet sich folgende Lösung an:
1. eine spalte einfügen mit den Zeilennummern.
2. für jede Zeile, die eingefügt werden soll, schreibt das Mako am Ende der Daten einen Zwischenwert in die Zeilenspalte, dh. wenn zwischen Zeile 7 und 8 eine Leerzeile eingefügt werden soll, an wird am Ende in die erste leere Zeile der Wert 7,5 geschrieben
3. dann nach der Spalte mit den Zeilen-Nummern sortieren
4. die Spalte mit den Zeiennummen wieder löschen
damit sollten jegliche Performance-Probleme vom Tisch sein.
der folgende Code würde nach jeder Zeile die ein "x" enthält, eine Leerzeile einfügen.
Sub Leerzeilen_einfügen()
Dim z1 As Long, z2 As Long, z3 As Long, i As Long
z1 = ActiveSheet.UsedRange.Row
z2 = ActiveSheet.UsedRange.Rows.Count
z3 = z1 + z2
Dim Zelle As Range
Columns(1).Insert
With Cells(z1, 1).Resize(z2, 1)
.FormulaLocal = "=Zeile()"
.Formula = .Value
End With
For i = z1 To z2 + z1 - 1
If Cells(i, 2) = "x" Then
Cells(z3, 1) = i + 0.5
z3 = z3 + 1
End If
Next
Cells(z1, 1).Resize(z3 - z1, 1).EntireRow.Sort , key1:=Cells(z1, 1), order1:=xlAscending, _
header:=xlNo
Columns(1).Delete
End Sub
zugegeben, die Schleife zum suchen ist nicht besonders effektiv, aber ich kenne deine Regeln nicht und hier gehts ja ums Prinzip, wie man Leerzeilen einfügt.
https://www.herber.de/bbs/user/51465.xls
Gruß, Daniel