Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
792to796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
792to796
792to796
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro beschleunigen

Makro beschleunigen
21.08.2006 19:09:23
Dirk
Hallo Zusammen,
mit dem folgenden Code trage ich Zahlen in eine Matrix ein.
Range("A4").Select
counter1 = 0
Do Until counter1 = 54678
x = ActiveCell.Offset(counter1, 0).Value
ActiveCell.Offset(counter1, x).Value = ActiveCell.Offset(counter1, x).Value + 1
counter1 = counter1 + 1
Loop
Mein Problem ist, dass das Eintragen länger dauert als die ganzen Berechnungen vorher. Da ich das ganze ca. 10000 mal machen will ist jede Beschleuningung herzlich willkommen. Fällt dazu jemandem etwas ein?
Danke schonmal.
Dirk

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro beschleunigen
21.08.2006 19:25:03
Heide_Tr
Hallo Dirk,
knapp 55.000 Zeilen sind halt auch eine Menge...
Was ganz sicher hilft: die Aktualisierung des Bildschirms vorübergehend ausschalten. Und falls Change-Ereignisse oder dergleichen durchlaufen werden, die auch. Und falls überhaupt Formeln enthalten sind, die auch.
also, bevor Dein Code läuft:


With Application
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
  .EnableEvents = False
End With


und anschließend alles wieder zurück:


With Application
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
  .EnableEvents = True
End With


viele Grüße. Heide
Anzeige
AW: Makro beschleunigen
21.08.2006 21:05:18
Klaus-Dieter
Hallo Dirk,
so dauert es auf meinem Rechner 6 Sekunden.

Sub eintragen()
Dim arr As Variant
Dim counter As Long
Dim x As Long
Range("A4").Select
'counter1 = 0
Do Until counter1 = 54678
x = ActiveCell.Offset(counter1, 0).Value
arr = ActiveCell.Offset(counter1, x).Value + 1
counter1 = counter1 + 1
Loop
Range("A4:A54682") = arr
End Sub

Viele Grüße Klaus-Dieter

Online-Excel
AW: Makro beschleunigen
21.08.2006 21:00:27
Daniel
Hallo,
du solltest die Berechnungen nicht direkt in den Zellen durchführen, sondern erst die Zellwerte in ein 2-dimensionales Array kopieren, dort die Berechungen durchführen und anschließend die Array-Werte wieder in die Zellen zurückkopieren.
Variablen sind in der Bearbeitung wesentlich schneller als Zellbezüge oder Objektvariablen.
bspw so:
public

Sub test()
Dim arrBereich
Dim rngBereich As Range
Dim i As Long
'Matrix als Zellbereich festlegen
Set rngBereich = Range("A4").Resize(54678 + 1, WorksheetFunction.Max(Range("A:A")) + 1)
'Zellbereich in Array-Variable kopieren
arrBereich = rngBereich.Value
'array-Variable berechnen
For i = 1 To UBound(arrBereich, 1)
arrBereich(i, arrBereich(i, 1) + 1) = arrBereich(i, arrBereich(i, 1) + 1) + 1
Next
'neue Werte aus Array in Zellbereich zurückkopieren
rngBereich.Value = arrBereich
End Sub

gruß, Daniel
Anzeige
AW: Makro beschleunigen
22.08.2006 13:26:17
Dirk
Besten Dank an alle!
Grüße
Dirk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige