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

Excel Tabelle optimieren

Excel Tabelle optimieren
11.12.2013 08:44:09
Dominic
Hallo,
ich habe mir in Excel eine extrem umfangreiche Kundenumsatztabelle aufgebaut aus der ich unzählige statistische Werte und Analysen entnehmen kann und auch übersichtlich die Umsätze aller Kunden auf Monatsbasis angezeigt bekomme. Nun ist es jedoch so, dass aufgrund des immensen Datenvolumens die Berechnung über meine Summewenns Formeln extrem langwierig sein kann. Die vollständige neu- Berechnung meiner Excel Tabelle dauert zwischen 30-120 Sekunden.
Es wäre super wenn Ihr einen Optimierungsvorschlag für mich hättet, ich beschreibe nun mal im Folgenden wie die ganze Datei aufgebaut ist, ein Beispiel kann ich leider nicht hochladen. Durch meine ausführliche Beschreibung sollte aber alles leicht verständlich werden:
In meiner Excel Datei gibt es ein Tabellenblatt „Datenbasis“. In diesem werden alle notwendigen Daten zur Umsatzanalyse via SQL Skript aus einer externen Datenbank herangezogen und in diesem Tabellenblatt der Reihe aufgelistet.
Das Tabellenblatt sieht in etwa so aus:
Spalte A: Kunden ID
Spalte B: Kunde
Spalte C: Kundenbetreuer
Spalte D: Jahr
Spalte E: Monat
Spalte T: Artikel
Spalte M: Umsatz1
Spalte L: Stückzahl
Spalte R: Umsatz 2
Spalte S: Umsatz 3
Nun habe ich in diesem Tabellenblatt ca. 80 – 120.000 (tausend!) Zeilen an Daten.
Die Umsätze ziehe ich im Tabellenblatt „Umsatzübersicht“ über folgende Formel heran:
SUMMEWENNS(INDEX(Datenbasis!$A:$S;;WAHL($B$5;;13;12;18;19));
Datenbasis!$A:$A;INDEX(Datensammlungen!$Y:$Y;ZEILE(A6)/6+2);
Datenbasis!$H:$H;$B$10;Datenbasis!$G:$G;C$26)))
Hier muss man noch anmerken, dass im Tabellenblatt Datensammlungen eine Auflistung aller Kunden mit Angabe der jeweiligen ID erfolgt, daher wird in der Summewenns Funktion dieses Tabellenblatt auch noch aufgeführt.
Das ist aber nicht das entscheidende, eine Idee zur Optimierung der Tabelle hätte ich, wenn wir folgendes Verhalten optimieren könnten:
Die Daten die im Tabellenblatt Datenbasis aufgeführt werden führen jeden einzelnen Verkauf einzeln auf. Das bedeutet, dass zum Beispiel in einem Monat beim Kunden „Kunde ABC“ mit der Kunden ID „ABC“ über 1.000 Datensätze angezeigt werden, nämlich jedes einzelne Produkt und die dazugehörigen Umsätze. Ich brauche aber nur die Summe zu diesem Kunden für den betroffenen Monat. Gibt es eine Möglichkeit, dass ich ein VBA Makro erstelle, das mir alle Umsätze eines Kunden auf monatsebene zusammenfasst? Zum Beispiel so, dass mir im Monat Mai 2013 zum Kunden „Kunde ABC“ mit der Kunden ID „ABC“ nur noch eine Zeile mit dessen Gesamtwerten aus diesem Monat vorliegen?
Dadurch würde die Datenbasis von 80-120.000 Zeilen auf nur noch ein Bruchteil dessen schrumpfen!
Aufgrund der unzähligen Auswertungen und Anzeigemöglichkeiten im Tabellenblatt „Umsatzüberblick“ ist es mir leider nicht möglich die Auswertungen aus diesem Tabellenblatt einfach als Werte in einer Hilfstabelle aufzuführen und per S-Verweis heranzuziehen. Dann müsste ich dies für jede Auswertungsform und für jeden Kunden machen, und das in jedem Monat dem ich die Datenbasis aktualisiere erneut.
Leider ist es mir auch nicht möglich, diese gewünschte Funktion gleich in das SQL Skript einzubauen.
Wenn ich jedoch ein VBA Makro hätte, dass mir die Daten entsprechend zusammenfasst könnte ich nach der monatlichen Aktualisierung der Datenbasis über die Datenbankverknüpfung kurz das Makro „anwerfen“ und habe das Datenvolumen deutlich gekürzt.
Danke im Voraus!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Tabelle optimieren
11.12.2013 12:29:40
Ludicla
Hallo Dominic,
hilft Dir die Pivot-Tabelle nicht weiter
Gruss Ludicla

AW: Excel Tabelle optimieren
11.12.2013 14:36:08
Rudi
Hallo,
Einzeldaten auf 'Datensammlungen'. Zusammenhängende Tabelle A:T!
Ergebnisse aud Blatt 'Summen'.
Sub Summen()
' Spalte A: Kunden ID
' Spalte B: Kunde
' Spalte C: Kundenbetreuer
' Spalte D: Jahr
' Spalte E: Monat
' Spalte L: Stückzahl
' Spalte M: Umsatz1
' Spalte R: Umsatz 2
' Spalte S: Umsatz 3
' Spalte T: Artikel
'Schlüssel: A|D|E
Dim oDic As Object, arrDaten, arrTmp, i As Long, j As Integer
Dim sKey As String
Const sDelim As String = "|"
arrDaten = Sheets("Datensammlungen").Cells(1, 1).CurrentRegion
Set oDic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arrDaten)
sKey = Join(Array(arrDaten(i, 1), arrDaten(i, 4), arrDaten(i, 5)), sDelim)
If oDic.exists(sKey) Then
arrTmp = oDic(sKey)
arrTmp(5) = arrTmp(5) + arrDaten(i, 12)
arrTmp(6) = arrTmp(6) + arrDaten(i, 13)
arrTmp(7) = arrTmp(7) + arrDaten(i, 19)
arrTmp(8) = arrTmp(8) + arrDaten(i, 20)
oDic(sKey) = arrTmp
Else
oDic(sKey) = Array(arrDaten(i, 1), arrDaten(i, 2), arrDaten(i, 3), arrDaten(i, 4), _
arrDaten(i, 5), arrDaten(i, 12), arrDaten(i, 13), arrDaten(i, 19), _
arrDaten(i, 20))
End If
Next
arrTmp = oDic.items
ReDim arrDaten(1 To oDic.Count, 1 To 9)
For i = 0 To UBound(arrTmp)
For j = 0 To 8
arrDaten(i + 1, j + 1) = arrTmp(i)(j)
Next
Next
With Sheets("Summen")
.Cells.ClearContents
.Cells(1, 1).Resize(UBound(arrDaten), 9) = arrDaten
End With
End Sub

Gruß
Rudi

Anzeige
AW: Excel Tabelle optimieren
13.12.2013 08:29:03
Dominic
Hallo Rudi,
super danke! Ich werde das gleich mal ausprobieren und dir ein Feedback durchgeben. :)
Gruß

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige