Clever-Excel-Forum

Normale Version: VBA - Performanceoptimierung, Blockverarbeitung Start und End-Zeile finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich habe ein sehr großes Makro und dies dauert je nach Datenmenge schon mal 5 Minuten. 

Die Zeitintensivste Anweisung ist die Bestimmung von Blöcken
Code:
For zabschl = ersterAbschl To Zabschlanzahl

        For i = row_blockstart To ws_ausw.UsedRange.SpecialCells(xlCellTypeLastCell).row
            If ws_ausw.Cells(i, zabschlspalte).Value <> zabschl Then
                row_blockende = i
                ws_ausw.Cells(i, 1).EntireRow.Insert
                Exit For
            ElseIf i = ws_ausw.UsedRange.SpecialCells(xlCellTypeLastCell).row Then
                row_blockende = i + 1
                ws_ausw.Cells(row_blockende, 1).EntireRow.Insert
                Exit For
            End If
        Next i

Die Daten liegen sortiert vor und ich möchte immer jeweils Blockanfang und Blockende bestimmen für weitere Bearbeitungen...

Kann man dort noch etwas rausholen? 
Im Durchschnitt dauert es nur 16ms... aber es gibt viele Blöcke (Derzeit 1500+)

Eventeull ist die Funktion Filter oder etwas mit Find besser? 

Hat schon jemand Erfahrungen damit gesammelt? 

Vielen Dank und viele Grüße
Richarde
Hallo,

vielleicht würde es helfen eine Beispieldatei mit 3-4 Blöcken zu zeigen.

Wichtig wäre:

Zell-Typen

- Zahlen
- Texte
- Leerzeilen

sollte mit dem Original übereinstimmen.

mfg
Hallöchen,

übernimm die Daten in ein Array, prüfe im Array und fülle mit den Treffern ein bzw. zwei Collections. Dann arbeitest Du die Collections auf dem Blatt ab.
Hi

Das Einfügen von Zeilen sollte in umgekehrter Reihenfolge (unten nach oben) gemacht werden und dabei die Events abgeschaltet sein.

Ist aber auch mit einer einfachen Formellösung schnell gemacht.

[attachment=40312]

Edit: Um eine zweite noch einfachere Formellösung ergänzt.