@ > Home > Inhalt > DBSUMME: alt, aber oho Excel 97+

DBSUMME ist die älteste Funktion, die Gruppensummen über Daten bildet. Sie wurde vom Konkurrenzprodukt Lotus 1-2-3 übernommen, um die Kompatibilität zu gewährleisten. Ein großer Nachteil ist, dass sie zur Auswertung auf einen 2zeiligen Kriterienbereich angewiesen ist. Dies ist bei den Gruppierungs-Mitbewerbern {SUMME}, SUMMENPRODUKT, SUMMEWENN, TEILERGEBNIS und Pivot-Tabelle nicht der Fall.

Der 2zeilige Kriterienbereich lässt sich nicht 1zeilig nachbilden, weder mittels INDIREKT, noch durch benannte Formeln, noch durch VBA oder Excel4-Makros, mit einer Ausnahme: Mehrfachoperation, siehe dafür http://support.microsoft.com/kb/500447/de, aus einem Newsgroup-Beitrag in microsoft.public.de.excel vom 29.2.2008 von H. G. Lamy und der Antwort von Peter Schleif. Anmerkung: Ab xl2000 lautet der Befehl Daten-Tabelle statt Daten-Mehrfachoperation.

Man kann ihn allerdings auch - etwas dynamischer - durch Shift-Operationen (INDEX:INDEX oder BEREICH.VERSCHIEBEN) aus einer 1zeiligen Vorgabe auf einem Nebenblatt erst erzeugen und dann durch den umgekehrten Shift in die 1-Zeiligkeit nach unten kopierter DBSUMME-Formeln integrieren. Man vollziehe das in der Zeile 3 der Datei selbst nach.

Die Überraschung ist nun groß: Bei einer Summierung von Werten bei 3 Bedingungen rennt DBSUMME gegenüber {SUMME} und SUMMENPRODUKT in nur einem knappen Achtel der Zeit ins Ziel: 

Anzahl SUMMENPRODUKT DBSUMME  Faktor pro SUMMEWENN  (bei jeweils     
Bed.   und {SUMME}            DBSUMME               100 Verwendungen
1       6,9 sec      1,7  sec    ~4      0,85 sec   der Formeln, die  
2      13   sec      1,85 sec    ~7      -          65534 Sätze
3      17   sec      2    sec    ~8      -          auswerten)

Das kann sich angesichts der gegenüber vorher 16fach möglichen Satzanzahl in Excel 2007 vielleicht noch einmal als der Rettungsanker erweisen. SUMMEWENN ist sogar noch schneller als DBSUMME, ist aber nur zu einer Bedingung in der Lage, die außerdem nicht wie in SUMMENPRODUKT fast beliebig formulierbar ist. Wer allerdings eine zusätzliche Hilfsspalte SUMMEWENN-gerecht formuliert und darauf Bezug nehmen lässt, gewinnt noch einmal die Hälfte der Zeit. Ab Excel 2007 öffnet sich diese Funktion auch mehreren Bedingungen und heißt dann SUMMEWENNS. Wahrscheinlich ist DBSUMME dann wieder im Vorteil.

Das Geheimnis liegt wahrscheinlich in der optimalen Formulierung der DB-Funktionen-Syntax: In jedem Kriterienfeld (welches sich seitlich wiederholen darf oder auch gar nicht auftauchen muss) steht eine (oder keine) simple unäre Bedingung (die jedoch auch beliebig komplex ausfallen darf). Die Datenbank selbst wird nur ein einziges Mal definiert; SUMMENPRODUKT hingegen benötigt für jede Spalte neu die explizite Mitteilung des Bereichs. Das ist in Spezialfällen wertvoll, wenn dieser Vektor nicht spalten-, sondern zeilenweise verschoben werden soll - meistens aber eben nicht.

Führen Sie den Test selbst durch, indem Sie die Instruktionen der Datei befolgen.

Noch ein Tipp: Um schneller zwischen {SUMME} und SUMMENPRODUKT wechseln zu können, verwenden viele (auch ich in dem Datei-Beispiel) bei SUMMENPRODUKT als UND-Bedingungstrenner das *. Das eigentlich mit der Funktion dokumentierte Semikolon ; führt jedoch zu merklich schnellerer Berechnung! Beispiel: Mit einer SUMMENPRODUKT-Formel mit zwei UND-Bedingungen und einer Summierspalte, die sich auf Daten von 60.000 Sätzen beziehen, sowie einer 1000fachen Verwendung der Formel rechnete Excel 2000 nur 70 (mit ;) statt 105 (mit *) Sekunden, was 67% entspricht. Die unter 0006.htm verlinkten Performancetipps für Excel 2007 sprechen von vorsichtigeren 77%.