Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1208to1212
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
Inhaltsverzeichnis

Matrixsummen per VBA berechnen

Matrixsummen per VBA berechnen
Werner
Hallo zusammen,
ich möchte in eine Exceltabelle eine große Menge Daten auswerten, die über Crystal Reports übertragen werden.
Die Datenschablone ist dabei immer gleich, die Datenmenge variiert..
Größe:
78 Spalten x 60.000 - 65536 Zeilen, je nach Auswertung.
Vorweg:
Da die Datenauswertetabelle immer gleich aussehen soll (siehe Beispiel), geht leider die Pivotauswertung hier nicht. So sind je nach Auswertungen nie alle Parameter vorhanden.
Auswertung

 BCDEFGHIJKLMNO
2ZP:Name xy            
3Titel:007123            
4AartVergabe            
5              
6BLTKST200020012002200320042005200620072008200920102011
7BundASt1            
8LandASt1            
9KreisASt1            
10DritteASt1            
11BundASt2            
12LandASt2            
13KreisASt2            
14DritteASt2            
15BundASt3            
16LandASt3            
17KreisASt3            
18DritteASt3            
19BundASt4            
20LandASt4            
21KreisASt4            
22DritteASt4            
23BundASt5            
24LandASt5            
25KreisASt5            
26DritteASt5            
27BundASt6            
28LandASt6            
29KreisASt6            
30DritteASt6            
31BundASt7            
32LandASt7            
33KreisASt7            
34DritteASt7            


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Insgesamt sollen hierbei mind. 5 Parameter abgeglichen werden (siehe hellgelbe Zellen)
Ich habe bereits eine funktionierende Matrixberechnung, die je Zelle die gesamte Matrix "ablatscht" um so die u.a. Tabelle zu füllen.
Da insgesamt über 320 Zellen die Matrixformel, mit den oben genannten Bereich (1-78:1-65536) berechnet, ist die Dauer dieser Auswertung nicht mehr zumutbar.
Über eine VBA- Lösung komme ich zurzeit leider auch nicht weiter, da meine For-To-Next etc. Schleife zu noch längeren Berechnungen führt.
Frage dazu:
Hat hier jemand eine Gedankenanstoß für mich?
Danke für jeden Hinweis.
Gruß
Werner Brinkmann

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Matrixsummen per VBA berechnen
04.04.2011 18:06:15
Tino
Hallo,
ich dachte an eine Auswertung mittels Array,
aber bei 75*65000 Daten wird wohl der Speicher streiken.
Daher müsste evtl. die Auswertung in mehreren Schritten gemacht werden.
Ob dies letztendlich schneller ist, wag ich auch noch zu bezweifeln.
Wenn Du mal genauere Angaben machst, könnte man mal was versuchen.
Besser wäre eine Beispieldatei, wo man das Ergebnis nachvollziehen kann.
Gruß Tino
Beispieldatei
04.04.2011 18:22:27
Werner
Hallo Tino,
hier mal eine Beispieldatei mit den notwendigsten Daten und einer Matrixformel (sehr abgespeckt), aber vom Grundsatz her so wie ich bisher die Berechnungen durchführen lasse:
https://www.herber.de/bbs/user/74273.xls
Matrixformel in Zelle
Auswertung

 D
728

Formeln der Tabelle
ZelleFormel
D7{=SUMME(($B7=CryRep!$A$2:$A$1000)*($C7=CryRep!$B$2:$B$1000)*(D$6=CryRep!$F$2:$F$1000)*($C$2=CryRep!$C$2:$C$1000)*($C$3=CryRep!$D$2:$D$1000)*($C$4=CryRep!$E$2:$E$1000)*(CryRep!$G$2:$G$1000))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß und Danke
Werner Brinkmann
Anzeige
kannst mal testen
04.04.2011 19:32:08
Tino
Hallo,
kannst mal versuchen, ob es schneller ist kann ich nicht versprechen.
In CryRep verwende ich eine Hilfsspalte, die wird am Schluss wieder gelöscht.
Sub Test_Makro() Dim rngFormel As Range Dim ArrData(), ArrAusgabe(), ArrSumme() Dim lngLetzte&, nC&, A&, B& Dim iCalc% With Application iCalc% = .Calculation .EnableEvents = False .ScreenUpdating = False .Calculation = xlCalculationManual With Tabelle1 lngLetzte = .Cells(.Rows.Count, 2).End(xlUp).Row If lngLetzte < 7 Then Exit Sub ArrAusgabe = .Range("B7", .Cells(lngLetzte, 2)).Resize(, 2).Value2 nC = .Cells(6, .Columns.Count).End(xlToLeft).Column - 3 With .Range("D7", .Cells(lngLetzte, 4)).Resize(, nC) .ClearContents ArrSumme = .Value2 End With With Tabelle2 Set rngFormel = .UsedRange.Columns(.UsedRange.Columns.Count).Offset(0, 1) For nC = 1 To Ubound(ArrSumme, 2) rngFormel.FormulaR1C1 = _ "=(RC3=Auswertung!R2C3)*(RC4=Auswertung!R3C3)*(RC5=Auswertung!R4C3)*(RC6=Auswertung!R6C" & 3 + nC & ")" ArrData = .UsedRange.Value2 lngLetzte = Ubound(ArrData, 2) For A = 1 To Ubound(ArrData) If ArrData(A, lngLetzte) = 1 Then For B = 1 To Ubound(ArrAusgabe) If ArrData(A, 1) = ArrAusgabe(B, 1) Then If ArrData(A, 2) = ArrAusgabe(B, 2) Then ArrSumme(B, nC) = ArrSumme(B, nC) + ArrData(A, 7) End If End If Next B End If Next A Next nC End With rngFormel.EntireColumn.Delete .Range("D7").Resize(Ubound(ArrSumme), Ubound(ArrSumme, 2)) = ArrSumme End With .EnableEvents = True .ScreenUpdating = True .Calculation = iCalc% End With End Sub Gruß Tino
Anzeige
AW: kannst mal testen
04.04.2011 19:46:06
Werner
Hallo Tino,
ich werde Deinen Ansatz morgen mal mit den Echtdaten ausprobieren.
Ich sage aber vorher schon mal 1000 Dank für Deine Mühe, sieht doch sehr vielversprechend aus.
Gruß
Werner Brinkmann
AW: kannst mal testen
05.04.2011 13:51:51
Werner
Hallo Tino,
ich habe "versucht" Deine Formel auf meine Bedürfnisse umzustellen.
Die ersten Testergebnisse sind sehr vielversprechend.
Anstelle von 7- 9 Minuten per Matrixformeln:
Jahre

 E
130,00

Formeln der Tabelle
ZelleFormel
E13{=WENN(C13<>"";WENN($B$7<>"";SUMME(($B$7=INDIREKT($G$3 &$J$1&":" & $G$2 &$J$2))*(E$9=INDIREKT($E$3 &$J$1&":" & $E$2 &$J$2))*($B13=INDIREKT($B$3 &$J$1&":"& $B$2 &$J$2))*($C13=INDIREKT($C$3 &$J$1&":" & $C$2 &$J$2))*INDIREKT($F$3 &$J$1&":" &$F$2 &$J$2)); SUMME((E$9=INDIREKT($E$3 &$J$1&":" & $E$2 &$J$2))*($B13=INDIREKT($B$3 &$J$1&":"& $B$2 &$J$2))*($C13=INDIREKT($C$3 &$J$1&":" & $C$2 &$J$2))*INDIREKT($F$3 &$J$1&":" &$F$2 &$J$2))); "")}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Bedingte Formatierungen der Tabelle
ZelleNr.: / BedingungFormat
E131. / Formel ist =$C13=""Abc
E132. / Formel ist =$B7=$C13Abc
E133. / Formel ist =$C13<>""Abc


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Sind es mit Deiner Hilfe "nur" noch 110 Sekunden für 64.000 Datensätze.
Danke Dir hierfür.
Gruß
Werner Brinkmann
Anzeige

145 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige