Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Performance in VBA - Zellbezüge & Datenfelder

Forumthread: Performance in VBA - Zellbezüge & Datenfelder

Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 13:38:39
Alex
Hallo,
ich habe eine kleine Frage zur Performance - vielleicht
kann mir jemand helfen.
Mir ist aufgefallen, das Excel mit Datanfeldern wesentlich
schneller rechnet als mit den Werten von Zellbezügen.
Mitunter hundert Mal so schnell.
z.B läuft diese

Sub :
Option Explicit

Sub Perf_gut()
Dim d(1 To 1000) As Double
Dim c As Long
Dim c2 As Long
Dim w As Worksheet
Set w = ActiveSheet
For c = 1 To 1000
d(c) = w.Cells(c, 1)
Next c
For c = 1 To 1000 - 1
For c2 = c + 1 To 1000
d(c2) = d(c2) + d(c)
Next c2
Next c
For c = 1 To 1000
w.Cells(c, 1) = d(c)
Next c
End Sub

erheblich schneller als diese:

Sub Perf_schlecht()
Dim c As Long
Dim c2 As Long
Dim w As Worksheet
Set w = ActiveSheet
Application.ScreenUpdating = False '24,5
Application.EnableEvents = False '18
Application.Interactive = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
For c = 1 To 1000 - 1
For c2 = c + 1 To 1000
w.Cells(c2, 1) = w.Cells(c2, 1) + w.Cells(c, 1)
Next c2
Next c
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Interactive = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub

Trotz der Manipulationen des Application Objects.
Problem bei der 1.

Sub ist aber, das sie doch sehr umständlich
zu programmieren ist.
Hat jemand eine Idee, wie man mit den Zellen in einer Excel-Mappe
genauso schnell rechnen kann, wie mit Datenfeldern? Bzw. den Code
der 2. 

Sub durch weitere Einschränkungen des Application-Object
weiter beschleunigen kann. Oder gibt es eine Einfache Möglichkeit,
Ranges in Datenfelder zu kopieren und umgekehrt?
Für eine Idee wäre ich sehr dankbar.

                    
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 14:50:08
Klaus-Dieter
Hallo Alex,
versuche es mal so:

Sub lesen()
Dim arr As Variant
arr = Range("A1:A20").Value
End Sub


Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 14:58:47
andre
Hallo allerseits,
mit dem Vorschlag von Klaus-Dieter sieht das Array etwas seltsam aus - es ist ja ein senkrechtes! (waagerecht gehts)
Mach's mal so:


Sub Perf_sehrgut()
    Dim d 'Variant!
    Dim c As Long
    Dim c2 As Long
    Dim w As Worksheet
    Set w = ActiveSheet
   Cells(1, 4) = Time()
    d = WorksheetFunction.Transpose(Range("a1:A1000"))
    For c = 1 To 1000 - 1
        For c2 = c + 1 To 1000
            d(c2) = d(c2) + d(c)
        Next c2
    Next c
    w.Range("a1:A1000") = WorksheetFunction.Transpose(d)
Cells(2, 4) = Time()
End Sub

     Code eingefügt mit Syntaxhighlighter 4.0

Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 15:07:28
Alex
Vielen Dank- diese Worksheetfunction.transpose
kannte ich noch nicht. Programmiert sich doch schon viel besser.
Aber eine Möglichkeit, auf die Zellinnhalte genau so schnell
zuzugreifen, wie auf Arrays oder Datenfelder gib es wohl
nicht - oder?
Ich kapier nicht ganz, warum dass so viel langsamer ist.
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 15:16:50
schauan
Hallo Alex,
die Sheets und VBA sind eben zwei verschiedene Dinge, und da muss das eine immer erst in das andere gebracht werden. 'Ne CD im Wechsler ist auch schneller gewechselt als wenn Du sie erst aus dem Schrank holst und manuell einlegst - vielleicht nicht der intelligenteste Vergleich, aber so etwa ist es.
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 15:21:34
schauan
Hallo Alex,
die Sheets und VBA sind eben zwei verschiedene Dinge, und da muss das eine immer erst in das andere gebracht werden. 'Ne CD im Wechsler ist auch schneller gewechselt als wenn Du sie erst aus dem Schrank holst und manuell einlegst - vielleicht nicht der intelligenteste Vergleich, aber so etwa ist es.
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 15:31:54
Alex
Das ist klar -
an die Zellen sind Funktionen und Ereignisroutinen gebunden etc.
während Arrays und Datenfelder nur Speicherbereiche sind.
Es ist ja nur die Frage, ob man Excel nicht klarmachen kann, eben nur
den Wert einer Zelle zu verändern, ohne die ganzen abhängigen Routinen
auszuführen. Wie es ja mit der Application.ScreenUpdating=false Einstellung
möglich ist, die Bildschirmaktualisierung auszuschalten.
Na - mal sehen, ob da noch was zu machen ist.
Vielen Dank so weit.
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 15:42:53
Klaus-Dieter
Hallo Andre',
was ist da seltsam?
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 16:15:07
Alex
Aber das:

Sub Perf()
Dim d As Variant
Dim c As Long
Dim c2 As Long
Dim w As Worksheet
Set w = ActiveSheet
d = Range("a1:A1000").Value
For c = 1 To 1000 - 1
For c2 = c + 1 To 1000
d(c2) = d(c2) + d(c)
Next c2
Next c
w.Range("a1:A1000") = d
End Sub

klappt bei mir so nicht.
Da bekomme ich die Fehlermeldung
Index ausserhalb des gültigen Bereichs
Anzeige
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 16:22:51
schauan
Hallo Klaus-Dieter,
na denn mal viel Spaß beim weiterprogrammieren - ich hoffe, Deine Lösung kommt noch. Ich denke mit dem Transpose sieht es zum einen "ordentlich" aus - siehe auch die Überwachung - und ist einfacher zu programmieren.
AW: Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 17:07:58
Klaus-Dieter
Hallo Andre',

arr(c2, 1) = arr(c2, 1) + arr(c, 1)
Auch wenn ich nur eine Spalte oder eine Zeile einlese, erhalte ich ein zweidimensionales Feld!

Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige