![]() |
Betrifft: Geschwindigkeit optimieren
von: Peter
Geschrieben am: 17.04.2003 - 15:29:16
Hallo.
Hat jemand vielleicht noch jemand eine Idee, wie man den Ablauf hier optimieren könnte?
Sub Farbenzählen()
Dim Zelle As Object
Dim gelb%, grün%, blau%
For z = 2 To 21
gelb = 0: grün = 0: blau = 0
For Each Zelle In Range(Cells(3, z), Cells(99, z))
Select Case Zelle.Interior.ColorIndex
Case 6: gelb = gelb + 1
Case 50: grün = grün + 1
Case 5: blau = blau + 1
End Select
Cells(100, z).Value = grün
Cells(102, z).Value = gelb
Cells(104, z).Value = blau
Next
Next
End Sub
Grüße
Peter
![]() ![]() |
Re: Geschwindigkeit optimieren
von: moe
Geschrieben am: 17.04.2003 - 16:03:05
das läuft bei mir ziemlich schnell ab
dein code dauert 2 sekunden bei mir meiner weniger als eine
Versuch es mal
gruss
Moe
Sub Farbenzählen()
Dim Zelle As Object
Dim gelb%, grün%, blau%
z = 3
Do Until z = 21
gelb = 0: grün = 0: blau = 0
For Each Zelle In Range(Cells(3, z), Cells(99, z))
Select Case Zelle.Interior.ColorIndex
Case 6: gelb = gelb + 1
Case 50: grün = grün + 1
Case 5: blau = blau + 1
End Select
Cells(100, z).Value = grün
Cells(102, z).Value = gelb
Cells(104, z).Value = blau
Next
z = z + 1
Loop
End Sub
![]() ![]() |
Re: Geschwindigkeit optimieren
von: gordon
Geschrieben am: 17.04.2003 - 16:13:50
Hallo Peter,
grundsätzlich alle Variablen dimensionieren (z fehlte, Zelle as Range, nicht as Object). Cells....value hinter die erste Schleife - generelle Frage: Ist es gewünscht, die Farben pro Spalte oder nur im gesamten Bereich zu zählen (da die Zähler nie auf Null zurückgesetzt werden). Wenn gesamter Bereich, dann kann auch die gesamte z...schleife entfallen und Du setzt den Range gleich auf Cells(3,2),Cells(99,21).
Berichte mal, ob es signifikant schneller geworden ist.
Gruß´
gordon
Sub Farbenzählen()
Dim z As Byte
Dim Zelle As Range
Dim gelb%, grün%, blau%
For z = 2 To 21gelb = 0: grün = 0: blau = 0
For Each Zelle In Range(Cells(3, z), Cells(99, z))
Select Case Zelle.Interior.ColorIndex
Case 6: gelb = gelb + 1
Case 50: grün = grün + 1
Case 5: blau = blau + 1
End SelectNext
Cells(100, z).Value = grün
Cells(102, z).Value = gelb
Cells(104, z).Value = blauNext
End Sub
![]() ![]() |
hier noch eine Möglichkeit .....
von: udo
Geschrieben am: 17.04.2003 - 16:22:10
hi peter,
das hat bei mir bei einigen Makros geholfen sie zu beschleunigen.
Sub Bla bla ...
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus
dann deine Anweisungen aller Art
und zum Schluss vor End Sub wieder
Application.ScreenUpdating = True 'Bildschirmaktualisierung ein
End Sub
Gruss udo
![]() ![]() |
manuelle Berechnung
von: GerdZ
Geschrieben am: 17.04.2003 - 16:50:13
Hallo Peter,
als großer Bremsklotz wirkt hier auch die automatische Neuberechnung nach jeder Zelländerung.
Schalte diese am Anfang des Makros mit
Application.Calculation = xlCalculationManual
auf manuelle Berechnung um und am Ende des Makros wieder auf Automatik zuück:
Application.Calculation = xlCalculationAutomatic
Gruß
Gerd
![]() ![]() |
Re: Geschwindigkeit optimieren
von: Peter
Geschrieben am: 17.04.2003 - 18:51:37
Hi.
Habe alles mal eingebaut. Geht jetzt recht schnell.
Die sache mit
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus
hat glaube ich am meisten gebracht. Aber alles zusammen ist perfekt. *G
Grüße
Peter
![]() |