Microsoft Excel

Herbers Excel/VBA-Archiv

Geschwindigkeit optimieren

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 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

Next

Cells(100, z).Value = grün
Cells(102, z).Value = gelb
Cells(104, z).Value = blau

Next

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