"Überlauf" - Formel-Ausgabe mehrerer Werte

In früheren Excel-Versionen hat man teilweise trotz korrekter Eingabe einer Formel die Fehlermeldung "#WERT!" erhalten. Dies war beispielsweise bei "=BEREICH.VERSCHIEBEN" der Fall, wenn das Ergebnis der Formel mehrere Werte beinhaltete. Dabei kommt es zu einem "Überlauf", da innerhalb einer Zelle nur ein Wert dargestellt werden kann. Angewendet hat man die erwähnte Formel unter anderem, um dynamische Bereiche zu definieren - damit Pivot-Tabellen oder Drop-Down-Listen (allenfalls nach dem Aktualisieren) die angepassten Datenquellen berücksichtigen. Dabei wird mit dem Namensmanager gearbeitet, wie bereits auf Excelblog.ch im Beitrag "Pivot-Datenquelle automatisch erweitern" sowie "Bereich eines Namens automatisch erweitern" erläutert wurde.

In diesem Beitrag gehen wir erneut auf die Formel "BEREICH.VERSCHIEBEN" ein und stellen damit innerhalb einer Excel-Tabelle eine dynamische Liste erneut dar - ohne den Namensmanager zu verwenden. Dabei simulieren wir erneut den angesprochenen "Überlauf" und zeigen, wie der Ergebnisbereich neuerdings in Excel dargestellt wird. Um dieses Beispiel zu erläutern, verwenden wir nachfolgende Länder-Liste auf dem Tabellenblatt "Parameter":

Laenderliste_Ausgangslage

Eine Drop-Down-Liste könnte ganz einfach auf diesen Bereich verweisen und nur diese Werte wären zulässig. Falls man jedoch weitere Länder in die Liste eintragen sollte, bleibt der Bezug der Drop-Down-Liste statisch. Weitere Erläuterungen zu diesem dynamischen Bereich findest Du im bereits verlinkten Beitrag "Bereich eines Namens automatisch erweitern". Die Formel, die wir verwenden, um den Bereich in unserem Beispiel dynamisch zu gestalten, lautet wie folgt:

=BEREICH.VERSCHIEBEN(Parameter!$A$2;;;ANZAHL2(Parameter!$A:$A)-1;)

Ausgehend von der Zelle "A2" (erstes Land) wird gemessen, wie viele Einträge in der Spalte A vorhanden sind (abzüglich 1 für die Überschrift). Dies ergibt unseren dynamischen Bereich, welchen wir in einer Drop-Down-Liste verwenden können:

Laenderliste_DropDown

Falls man obige Formel jedoch nicht im Namen eingibt, sondern wie ansonsten üblich in einer einfachen Zelle (im Screenshot unten Zelle "B2"), dann erhalten wir folgendes Resultat:

Laenderliste_BereichVerschieben

Die Liste wird exakt gleich dargestellt und die Werte werden in den Zellen unterhalb von B2 weitergeführt - die Zelle B2 ist "überlaufen". Wenn Du in die Zelle B2 klickst, siehst Du die Formel in der Bearbeitungsleiste normal angezeigt. Klickst Du jedoch beispielsweise in die Zelle "B3", dann ist die Formel zwar angezeigt, aber ausgegraut. Du kannst sie da auch nicht bearbeiten - nur eben in Zelle "B2". Falls Du einen Wert in den "Überlaufbereich" einfügst (z.B. in Zelle "B3"), dann erhältst Du neu die Fehlermeldung "#ÜBERLAUF!". Dies ist ein Hinweis, dass der Überlaufbereich nicht leer ist. Über die Fehlermeldung kann man auch direkt in die "blockierende Zelle" navigieren - dies kann vor allem bei grösseren Listen hilfreich sein:

Laenderliste_Ueberlauf

=SORTIEREN - ein weiterer Anwendungsfall

Eine weitere Formel, die nun ein interessantes Ergebnis mit Überlauf liefert, ist "=SORTIEREN". Dies kann erneut mit der obigen Länder-Liste illustriert werden. Angenommen die Länder sind einfach über die Zeit in die Liste eingetragen worden, ohne einer Reihenfolge oder Sortierung zu unterliegen. Mit der Formel "=SORTIEREN" kann einfach die gesamte Liste markiert werden, um die Länder im Zielbereich alphabetisch zu sortieren - dafür benötigt es in der Formel keine weiteren Angabe, der Bereich (z.B. "A2:A11") genügt! Die Formel wird in einer Zelle eingetragen, sämtliche Länder werden mithilfe des Überlaufs als Bereich ausgegeben. Dies ist das Resultat, nebeneinander dargestellt:

Laenderliste_SORTIEREN

Eigene Funktionen erstellen (Meter in Meilen & Celsius in Fahrenheit)

Eine Vielzahl an Funktionen und Formeln sind bereits standardmässig in Excel verfügbar. Dem Standarduser genügt dieses Angebot grundsätzlich, doch können auch da eigene Funktionen den Umgang mit Excel erleichtern. Dieser Blog zeigt auf, wie benutzerdefinierte Funktionen und Formeln angelegt werden können, die danach jederzeit verfügbar sind. Als Beispiel werden wir hier Meter in Meilen sowie Grad Celsius in Fahrenheit umwandeln.

Meter in Meilen

Die erste Funktion, die angelegt werden soll, ist die Umwandlung von Meter in Meilen (eine englische Meile beträgt 1'609.344 Meter). Öffne hierzu eine neue Arbeitsmappe und gehe in die VBA-Umgebung (Alt + F11 oder Rechtsklick auf ein Tabellenblatt → "Code anzeigen"). Auf der linken Seite befindet sich die Projekt-Übersicht - dort sind alle geöffneten Excel-Dateien zu sehen. Mittels Rechtsklick auf die neue Arbeitsmappe lässt sich ein Modul einfügen, wo die Funktion eingepflegt werden kann:

NeuesModulEinfuegen

Im angelegten Modul1 wird nun die Funktion eingetragen. Für die Umrechnung von Meter in Meilen gilt folgender Code:

Public Function MeterInMeilen(ByVal X As Double)

MeterInMeilen = X / 1609.344

End Function

Die Formel nennen wir "MeterInMeilen". Achte bei der Vergabe der Namen darauf, dass diese nicht bereits vorhanden sind. In unserer Excel-Datei kann alsdann mit der Umwandlung begonnen werden. Die Funktion findet sich unter sämtlichen anderen - gebe in Excel einfach "=M" ein und die Vorschläge erscheinen in einer Auswahlliste, dort ist auch "MeterInMeilen" aufgeführt:

EigeneFunktionenAuswahl

Um die Umwandlung der Massangaben zu veranschaulichen, habe ich eine kleine Tabelle angelegt:

MeterInMeilen

In Zelle "B3" sind 1000 Meter eingetragen, dieser Wert kann selbst gewählt werden. In Zelle "C3" kommt unsere benutzerdefinierte Funktion zum Einsatz. Füge da nun die folgende Formel ein:

=MeterInMeilen(B3)

Ein simpler Bezug auf die Zelle "B3" reicht bereits aus, um die Meterangabe in Meilen zu konvertieren. Uns interessiert zudem, wie wir die Rückkonvertierung vornehmen können. Dazu wird folgender Programmcode eingetragen, um die Funktion "MeilenInMeter" anzulegen:

Public Function MeilenInMeter(ByVal X As Double)

MeilenInMeter = X * 1609.344

End Function

Diese Zeilen können direkt unterhalb von "End Function" der ersten Funktion in Modul1 eingetragen werden. In der Excel-Beispieltabelle kann für die Meter-Rückkonvertierung die neue Formel eingegeben werden:

=MeilenInMeter(C3)

Das Resultat davon ist wiederum exakt 1'000 Meter.

Celsius in Fahrenheit

Analog der Konvertierung oben soll nun zudem Grad Celsius in Fahrenheit umgewandelt werden können. Folgender Code erfüllt diese Anforderung:

Public Function CelsiusInFahrenheit(ByVal X As Double)

CelsiusInFahrenheit= X * 9 / 5 + 32

End Function

Wiederum als Beispieltabelle in Excel wird in Spalte C die Berechnung von diversen Temperaturangaben vorgenommen.

CelsiusInFahrenheit

Die angegebenen Werte sind korrekt, man könnte zudem die Dezimalstellen einblenden (beispielsweise 22 Grad Celsius entsprechen 71.6 Grad Fahrenheit). Die angelegte Funktion kann damit ebenfalls umgehen, da der Variablentyp "Double" gewählt wurde.

Auf die Rückkonvertierung wird hier nicht eingegangen, wir lassen dies als mögliche "Übungsaufgabe" offen. Bei Fragen kann stets die Kommentar-Sektion verwendet werden.

Zuletzt ist anzumerken, dass neben komplett neuen Funktionen wie den oben gezeigten Umwandlungs-Formeln auch bestehende Standard-Formeln individuell optimiert werden könnten. Ein Beispiel ist der SVERWEIS, bei dem Benutzer je nach dem immer wieder Probleme bekunden - bei dem Verweis gibt es diverse Fehlerursachen. Mit einer eigenen Funktion (z.B. analog der INDEX-VERGLEICH-Kombination) kann der SVERWEIS benutzerfreundlicher gestaltet werden und zugleich auch Daten links von dem Suchkriterium ausgeben.

(Dynamische) Formeln über mehrere Tabellenblätter

Bei dynamischen Dateien ist es wichtig, dass Formeln möglichst auf Veränderungen reagieren und diese ohne weiteren Aufwand durch den Benutzer stets die korrekten Daten anzeigen. Ein Unternehmen weist betriebsintern beispielsweise Zahlen für die jeweiligen Regionen und Unternehmenseinheiten aus. Unten ist ein Beispiel dargestellt, bei dem unterschiedliche Regionen ("Basel", "Bern" und "Zürich") vorhanden sind. Zudem werden die Daten auf Konzernebene aggregiert (Tabellenblatt "Total").

SheetIndexSheetsA

Die einzelnen Regionen weisen jeweils die gleiche Struktur auf, wobei auf dem Total-Tabellenblatt einfach auf die einzelnen Zellen Bezug genommen werden kann. Die Formel "=SUMME(Basel:Zürich!C8)" summiert die Zelle "C8" von sämtlichen Tabellenblättern (von "Basel" bis "Zürich"). Sollte nun eine weitere Region (beispielsweise "Genf") hinzugefügt werden, wird der Wert in Zelle "C8" zusätzlich berücksichtigt - sofern das Blatt "Genf" zwischen Basel und Zürich eingeordnet wird. Falls jedoch "Aargau" dazukommen sollte und an der alphabetischen Reihenfolge festgehalten wird, müsste die SUMME-Formel entsprechend angepasst werden. Eine weitere Möglichkeit ist jedoch die nachfolgende: Um die SUMME-Formel keineswegs anpassen zu müssen, fügen wir links und rechts der Regionen weitere leere Tabellenblätter ein ("Kanton_AA" und "Kanton_ZZ") und blenden diese aus. Unsere SUMME-Formel sollte sich nun über diese Hilfsblätter erstrecken:

=SUMME(Kanton_AA:Kanton_ZZ!C8)

SheetIndexSheetsZ

Da die Hilfsblätter leer sind, wird zwar "C8" ebenfalls aggregiert, aber dies entspricht jeweils dem Wert 0 und hat deshalb keinen Einfluss auf das Gesamttotal. Mit dieser Herangehensweise werden die unterschiedlichen Szenarien bereits von Anfang an aufgefangen und die Daten in "Total" basieren jederzeit auf allen Regionen.