Anzeige
Archiv - Navigation
268to272
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
268to272
268to272
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrixwerte aufaddieren

Matrixwerte aufaddieren
14.06.2003 12:38:48
Helga
Hallo Leute,

Bisher habe ich schon viel von euch gelernt (VBA). Dieses mal habe ich mir eine Routine geschrieben, die auch funktioniert, aber dazu muss ich meinen Computer über Nacht laufen lassen, bis der die 220 Datensätze berechnet hat :-(((

Folgendes:
Habe eine Matrix von 40 x 40 Zellen, in denen mein Programm Werte einträgt. Diese Matrix befindet sich „CG9:DT48“. Nachdem nun diese Werte eingetragen wurden, möchte ich sie in einer anderen Matrix aufaddieren. Diese Matrix ist in „D11:AQ50“.
Nun wird ein neuer Datensatz geholt:

For i = 1 To 221 ‘ Datensätze
Cells(2, 44).Value = Cells(2, 44).Value + 1

Und die ganze Procedure geht von vorne los. Habe alles auf einen Button gelegt, um die Berechnung zu starten.

Nur wie gesagt, es dauert alles viel zu lange. Ihr Profis habt sicherlich eine Idee, wie ich das ganze schneller bekomme.

Private Sub CommandButton1_Click()

For Z = 11 To 50
For S = 4 To 43
Cells(Z, S).Value = Cells(Z, S).Value + Cells((Z - 2), (S + 81)).Value
Next S
Next Z
‘ Hier wurden die ersten Werte in die Matrix „D11:AQ50“ aufaddiert.


For i = 1 To 221 ‘ Datensätze
Cells(2, 44).Value = Cells(2, 44).Value + 1 ‘ hier werden neue Werte geholt
Application.Calculate
For Z = 11 To 50
For S = 4 To 43
Cells(Z, S).Value = Cells(Z, S).Value + Cells((Z - 2), (S + 81)).Value
Next S
Next Z
Next I

End Sub

Gruß
Helga



12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Matrixwerte aufaddieren
14.06.2003 13:20:53
L.Vira

Es ist ungleich schneller, die Berechnung nicht in den Zellen selbst, sondern in Arrays auszuführen und dann in die zellen zu übertragen.
Einen Zeitgewinn wirst du auch erzielen, wenn du am Anfang des Codes:
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
ausführst und am Ende:
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With


Re: Matrixwerte aufaddieren
14.06.2003 13:22:00
Nepumuk

Hallo Helga,
was wird da noch berechnet? (Application.Calculate)
Ich habe deinen Code mal laufen lassen. Dauer ca. 23 Sekunden.
Gruß
Nepumuk

Anzeige
@L.Vira
14.06.2003 18:21:46
Helga

Hallo,

was macht diese Application: ".Calculation = xlCalculationManual" ?
Wenn ich diese einfüge, kann ich garnicht so schnell schauen, wie die Berechnungen vor sich gehen. Nur eben stimmen dann die Werte nicht, die eingetragen werden.

Mein Betriebssystem Windows XP Prof. und ich arbeite mit Office 2000. Habe zwar auch Office XP in der Schublade, aber noch nicht installiert.

Gruß
Helga


Re: @L.Vira
14.06.2003 19:33:10
L.Vira

Ich hab deinen Code nicht analysiert, scheint nur so, als wenn du während der Berechnung ständig einen Wert hochzählst?
Ich hab ein arges Verständnisproblem, wozu das Ganze dient.

Anzeige
Re: @L.Vira
14.06.2003 19:42:00
Helga

Hallo,

ich habe eine Tabelle mit nur einem Arbeitsblatt und in diesem Arbeitsblatt habe ich 222 Spalten (jede Spalte stellt einen Arbeitstag dar) mit Werten vorliegen.

Nun nimmt dieses Programm jetzt aus meiner Tabelle mit den 222 Tagen jeweils einen Tag und trägt diese Werte in meine Tabelle ein. Die Berechnung erfolgt und wird in der 1.Matrix eingetragen. Da ich aber wissen möchte, wie oft nun ein Wert vorkommt, wird dazu die 2.Matrix gebraucht, die die Werte aus der 1.Matrix addiert. Das ist eigentlich alles.

Gruß
Helga

Re: @L.Vira
14.06.2003 19:57:13
L.Vira

Versteh ich immer noch nicht, ich bastel mir das jetzt mal nach.

Anzeige
Re: @L.Vira
14.06.2003 21:09:21
L.Vira

''Erkenne den Sinn noch immer nicht, aber das ist auch nicht
''erforderlich. Probiers mal so:

Sub mit_Datenfeld()
''Ein Datenfeld unterscheidet sich etwas von einem "normalen" Array.
''Der Index beginnt, anders als beim Array, mit 1
''Außerdem kann man einem Datenfeld einen Zellbereich in einem Rutsch
''zuordnen und umgekehrt, das spart Zeit.
''Dein Originalmakro braucht bei mir ca. 20 Sekunden.
''Mit Datenfeld dagegen ca. 3 Sekunden!

''löschen, nur zum Testen
Dim start As Single
''-----------------------
Dim Arr As Variant
Dim z As Long, s As Long, i As Long

''löschen, nur zum Testen
start = Timer
''-----------------------
Application.ScreenUpdating = False
For z = 11 To 50
For s = 4 To 43
Cells(z, s).Value = Cells(z, s).Value + Cells((z - 2), (s + 81)).Value
Next s
Next z

Arr = [d11:aq50] 'Daten ins Datenfeld

For i = 1 To 221
Cells(2, 44) = Cells(2, 44) + 1
For z = 1 To 40
For s = 1 To 40
Arr(z, s) = Arr(z, s) + Cells((z + 8), (s + 84)).Value
Next s
Next z
Next i

[d11:aq50] = Arr 'Daten vom Datenfeld in die Tabelle

Application.ScreenUpdating = True

'löschen, nur zum testen
MsgBox Timer - start

End Sub

Anzeige
Re: @L.Vira
14.06.2003 21:27:58
Helga

Hallo und vielen Dank.

Werde ich morgen mal ausprobieren und dann sofort berichten.
Ich muss noch sehr viel lernen :-(((

Gruß
Helga

Re: @L.Vira
15.06.2003 07:59:22
Helga

Hallo und guten Morgen,

habe Deine Routine eingebunden und sie funzt, dass es eine wahre Pracht ist. Die 222 Datensätze benötigen gerade mal 160 Sekunden; W A H N S I N N :-))))

Nochmals vielen Dank. Vielleicht könntest Du mir im Bezug auf VBA noch einen Buchtipp geben, ist doch schon klasse, wenn man VBA beherrscht.

Einen schönen Sonntag
wünscht
Helga

Re: @L.Vira
15.06.2003 10:05:07
L.Vira

Hi, Helga,
160 Sekunden(wunder, staun, zweifel)? Was ist denn das für ein Rechner? Bei mir dauert das ganze ca. 3 Sekunden!
Buchtipp? Ich hab gelesen, dass ein Michael Kofler da mehrere Sachen veröffentlicht hat, die sehr gut sein sollen.
Gruß L.Vira

Anzeige
Re: @L.Vira
15.06.2003 10:36:54
Helga

Hallo L.Vira,

mein Rechner : 1800 AMD, 2X80 GB IBM-Disk , 512 MB Speicher.

Die Sachen waren vor einem Jahr noch derart billig, da konnte man noch klotzen statt kleckern. Aber; es zahlt sich aus.

Gruß
Helga


Re: @L.Vira
15.06.2003 13:22:25
L.Vira

Hi, Helga,
umso mehr wunderts, dass das 160 Sekunden dauern soll, wie gesagt bei mir dauert das rund 3 Sekunden.
2,4 GB, 512 MB RAM
Gruß L.Vira

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige