FIND macht Excel langsam
09.03.2007 15:22:00
Michel
Hallo zusammen,
ich habe da mal ein Problem, welches ich bisher nicht lösen konnte - auch nicht durch das Suchen in Google und anderen Foren. Ich bin zwar Ansatzweise auf Ideen gestoßen, die bisher aber nicht wirklich halfen....
Die Aufgabenstellung:
Es geht um eine Liste in Excel, welche >10.000 Zeilen und > 80 Spalten ist. In dieser Liste sind Gruppen mit eindeutigen Zahlencodes codiert. Jede dieser Gruppe hat spezifische Eigenschaften, welche innerhalb der Gruppe gleich sein sollen. Dies gilt es zu prüfen.
VBA-Ansatz:
While ActiveSheet.Cells(x, 5).Text <> ""
If ActiveSheet.Cells(x, 16).Text <> "" And ActiveSheet.Cells(x, 4).Text = "" Then
Set rawrow = ActiveSheet.Range(Cells(x, 16), Cells(z + 11, 16)).Find(ActiveSheet.Cells(x, 16).Text, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
If Not rawrow Is Nothing Then
startrow = rawrow.Row
ActiveSheet.Cells(startrow, 4).Value = "CHECKED"
Do
.....
hier folgen die Prüfparameter innerhalb der Gruppe
.....
Set rawrow = ActiveSheet.Range(Cells(x, 16), Cells(z + 11, 16)).FindNext(rawrow)
Loop While Not rawrow Is Nothing And rawrow.Row <> startrow
End If
End If
Set rawrow = Nothing
x = x + 1
Wend
Dabei gilt für z+11 > x
Es wird nur geprüft, wenn auch eine Gruppennummer vergeben ist. (1. IF Bedingung im Code)
[x,4] ist als Flag gedacht, so daß keine doppelte Prüfung erfolgt. (1. IF Bedingung im Code)
Weiterhin wird das Suchfeld dynamisch eingeengt, da alles vor x ja schon geprüft wurde. (SET Befehl für Objekt rawrow)
Es handelt sich also letztendlich um eine triviale FIND Methode bezogen auf eine RANGE.
Das Problem:
Es ist so, daß Excel den Code immer langsamer bzw. sehr gemächlich abarbeitet, obwohl eine dynamische Einengung des Suchbereiches erfolgt. Eigentlich müsste die Geschwinigkeit mit zunehmender Anzahl an Prüfungen zunehmen.
Ein weiteres Phänomen tritt auf, wenn das Makro beendet bzw. abgebrochen wird. Wird nun die Suchfunktion in Excel (STRG-F) bemüht, so quält sich Excel durch das Tabellenblatt duch. Man kann dabei zusehen wie es die einzelnen Zellen (erkenntlich im Namenfeld) durchrattert. Wenn das Tabellenblatt frisch geladen ist geht das ohne Zeitverzögerung.
Die Frage ist, woran das liegen mag. Liegt hier ein genereller Fehler in Excel vor (z.B. HEAP/STACK Fehler, Speichermanagement, Garbage Collection, etc...) oder ist das ein Feature von Bill?
Es ist ziemlich nervig, da die Prodzedure im Moment 4-5 Stunden dauert.
Vielleicht hatte jemand schon mal ein ähnliches Problem oder kennt einen Bärentrick wie man das umschifft.
PS:
In einem älteren Thread wurde dieses Thema schon mal ähnlich diskutiert. Dies Früchte dessen habe ich im Code schon eingebaut: SET rawrow = NOTHING. Das hilft aber auch nix.
Ich hoffe auf eine rege Diskussion und brauchbaren Ideen. Danke!
Grüßle,
michel