Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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

grosse Datenmengen mit sumproduct und Array ausw.?

grosse Datenmengen mit sumproduct und Array ausw.?
Peter
Guten Abend
Ich werte ein umfangreiches Journal mit SUMMENPRODUKT aus. Da die Datei-Vollversion sehr gross ist, habe ich die Werte im VBA mit Evaluate ermittelt und in den entsprechenden Zeilen eingetragen.
Bevor die Auswertung erstellt wird, wird in Tabelle „Auswertung“ in Spalte A ab Zeile 26 die Daten der Tage einge-tragen.
Im stark verkleinerten Beispiel werte ich die erste Formel aus und trage die Werte in Spalte C ein. Dann werte ich die zweite Formel aus und subtrahiere die berechneten Werte von den bereits eingetragenen Werten.
In der Vollversion muss in den meisten Spalten nur einen Wert eintragen.
Da in der Regel 365 Zeilen (ein ganzes Jahr) abgefüllt werden und gegen 80 Spalten abgefüllt werden, suche ich nach einer Möglichkeit, die Auswertung zu beschleunigen.
Aufgrund der wenigen Kenntnisse mit Arrays vermute ich, dass sich die Werte zuerst in ein Array schreiben lassen und dann alle Werte in der entsprechenden Spalte eingefügt werden können.
Ich weiss aber nicht, ob dazu EVALUATE überhaupt funktioniert.
Jede Hilfe ist sehr willkommen.
Gruss, Peter
https://www.herber.de/bbs/user/71046.xls

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: grosse Datenmengen mit sumproduct und Array ausw.?
13.08.2010 00:06:50
fcs
Hallo Peter,
VBA-Prozeduren sind in den seltesten Fällen schneller als die direkte Anwendung von Funktionen in den Tabellen.
Ein Weg um die Berechnungszeiten in den Tabellen zu minimieren kann dann sein, Formeln in die Zellen einzutragen und anschließend durch ihre Werte zu ersetzen.
Ich hab deine Prozedur mal in diese Richtung angepasst. Dabei ist es Geschmackssache, ob man die Formeln so extrem per Formel "zusammenbastelt" oder die Formeln weitestgehen übernimmt wie mit dem Recorder aufgezeichnet und sich auf notwendige Anpassungen für Zeilen/Spalten beschränkt.
Auf alle Fälle sollte zur Beschleunigung der Makroausführung auch die Bildschirmaktualisierung vorübergehend deaktiviert werden.
Gruß
Franz
Sub Eintragen()
Dim cD1 As String, cD2 As String, cD3 As String, cD4 As String, cD5 As String, cD6 As  _
String, cD7 As String, cD8 As String
Dim startDate As Date, endDate As Date
Dim aSheet As Worksheet
Dim zNr As Long, zLast As Long, sNr As Long, sFormel
Dim xS As String, xL As String, T As String
Set aSheet = ThisWorkbook.Sheets("Auswertung")
With aSheet
cD1 = "xDatum"
cD2 = "xKonto"
cD3 = "xSoll"
cD4 = "xHaben"
cD5 = "xGegKonto"
cD6 = "xBuText"
xS = "SumProduct"
xL = "Left"
T = aSheet.Name
zNr = 26
Worksheets(aSheet.Name).Activate
'Letzte Datenzeile
zLast = .Cells(.Rows.Count, 1).End(xlUp).Row
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'Variante 1 - Formeln im Code per Formel zusammengestellt.
''''''''SUMMENPRODUKT((xDatum=$A26)*(xKonto=C$23)*(LINKS(xGegKonto;3)="102")*xSoll)
sNr = 3 'Spalte C  berechnen - Formeln im Code in R1C1-Schreibweise
sFormel = "=" & xS & "((" & cD1 & "=" & T & "!R[0]C1)*(" & cD2 & "=" & T _
& "!R23C" & sNr & " )*(" & xL & "(" & cD5 & ",3)=" & """102""" & " )*" & cD3 & ")"
With .Range(.Cells(zNr, sNr), .Cells(zLast, sNr))
.FormulaR1C1 = sFormel
.Calculate
.Value = .Value
End With
'' Gebühren aus Verkauf werden aus Kaufspalte eliminiert und mit Verkaufsspalte verrechnet
''''''''SUMMENPRODUKT((xDatum=$A31)*(xKonto=C$23)*(LINKS(xBuText;10)="VGebuehren")*(LINKS( _
xGegKonto;3)="102")*xSoll)
'Werte in Hilfsspalte (90) berechenen
sFormel = "=R[0]C" & sNr & " - " & xS & "((" & cD1 & "=" & T & "!R[0]C1)*(" & cD2 & "=" _
& T & "!R23C" & sNr & ")*(" & xL & "(" & cD6 & ",10)=" & """VGebuehren"""  _
& " )*(" &  xL & "(" & cD5 & ",3)=" & """102""" & " )*" & cD3 & ")"
With .Range(.Cells(zNr, 90), .Cells(zLast, 90))
.FormulaR1C1 = sFormel
.Calculate
.Value = .Value
'Werte nach Spalte  kopieren
.Copy Destination:=aSheet.Range(aSheet.Cells(zNr, sNr), aSheet.Cells(zLast, sNr))
'Hilfsspalte wieder löschen
.Clear
End With
GoTo Weiter01
'Variante 2 - Formeln dierekt im Code geschrieben
sNr = 3 'Spalte C  berechnen
sFormel = "=SUMPRODUCT((xDatum=R[0]C1)*(xKonto=R23C" & sNr _
& ")*(LEFT(xGegKonto,3)=""102"")*xSoll)"
With .Range(.Cells(zNr, sNr), .Cells(zLast, sNr))
.FormulaR1C1 = sFormel
.Calculate
.Value = .Value
End With
'Berechnung in Hilfsspalte 90
sFormel = "=R[0]C" & sNr & " - SUMPRODUCT((xDatum=R[0]C1)*(xKonto=R23C" & sNr _
& ")*(LEFT(xBuText,10)=""VGebuehren"")*(LEFT(xGegKonto,3)=""102"")*xSoll)"
With .Range(.Cells(zNr, 90), .Cells(zLast, 90))
.FormulaR1C1 = sFormel
.Calculate
.Value = .Value
'Werte aus Hilfsspalte nach Spalte kopieren
.Copy Destination:=aSheet.Range(aSheet.Cells(zNr, sNr), aSheet.Cells(zLast, sNr))
'Hilfsspalte wieder löschen
.Clear
End With
End With
Weiter01:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: grosse Datenmengen mit sumproduct und Array ausw.?
13.08.2010 21:42:03
Peter
Hallo Franz
Vielen Dank für deine Antwort. Ich kann dabei viel lernen!
Im Grunde genommen ist mir die volle Schreibweise der Formeln lieber, da besser verständlich. Ich habe es wohl mal gemacht, da meine Codezeilen mit EVALUATE sonst zu lang wurden (darf man nicht nur eine bestimmte Anzahl Zeichen (256?) pro Zeile verwenden?).
Anhand deiner Antwort kann ich dies nun in meiner Auswertung umsetzen. Super!
Wünsche dir ein schönes Wochenende.
Gruss, Peter

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige