Autor: Peter Haserodt --- Aus Excel Standard - Gruppe:
Tutorials !Langsames Excel (1) - Volatile Funktionen
Autor: Peter Haserodt - Erstellt: ? - Letzte Revision: ?Gruppenthema: 3 Folgen 1 2 3 Sie sind in Folge:1
Lähmende Funktionen - von volatil und mehr
Vorwort - unbedingt lesen!
Bei diesem Tutorial war ich mir überhaupt nicht sicher, wohin ich dies platzieren soll. Nach Excel Standard oder VBA, da einige Tests in diesem Tutorial mit VBA geschehen.
Da es aber hauptsächlich um Excelfunktionen geht, habe ich es hierher gestellt.
Um den VBA-Laien aber nicht total zu überfordern, stelle ich ausnahmsweise Mappen zum Download zur Verfügung.
Noch schwieriger ist es, welche
Anforderungen an den Leser gestellt werden.
In Excel sollten gute bis sehr gute Kenntnisse vorhanden sein.
VBA-Kenntnisse sind hilfreich, um einige Experimente nachvollziehen zu können, bzw. diese zu erweitern.
Aber ich versuche mein Bestes, auch für VBA-Novizen dies über die Downloads zu regeln.
Außerdem gebe ich Ihnen hier nur Ansätze zum weiterentwickeln.
Ihrer Kreativität sind also keine Grenzen gesetzt.
Hinweis:
Bitte haben Sie immer nur die Mappen geöffnet, die ich im Laufe des Tutorials ansage.
Es ist auch durchaus sinnvoll, Excel immer mal neu zu starten.
Ganz wichtig ist, dass die automatische Berechnung eingeschaltet ist!
Vorwort 2
Ich gestehe, lange Zeit habe ich mir nicht so richtig Gedanken darüber gemacht, was in Excel alles passiert.
Da ich meistens Excel von hinten angreife(VBA), sind mir einige Dinge nicht so richtig aufgefallen (Da ich dort vieles abschalte, was verlangsamend wirkt)
Eigentlich mehr aus Zufall kam ich dazu, die Excelaktionen intensiver zu untersuchen.
Was als kurzes Drüberkucken begann, endete in richtiger Arbeit und in ungläubigem Staunen und teilweise sogar in Entsetzen.
An meinen Entdeckungen möchte ich Sie teilhaben lassen.
Volatile Funktionen - was ist das überhaupt?
Volatil bedeutet soviel wie flüchtig. Damit können wir aber noch wenig anfangen.
Der frisierte - oder versierte VBA-Anwender kennt dies aus benutzerdefinierten Funktionen, dass man eine solche Funktion volatil machen kann, d.h. diese wird ständig neuberechnet wenn - ja ? wenn-wann und überhaupt.
Microsoft - msdn schreibt dazu in einem englischen Artikel unter:
http://msdn.microsoft.com/en-us/library/aa213653(office.11).aspx:
[...A volatile function must be recalculated whenever calculation occurs in any cells on the worksheet...]
Was soviel bedeutet, dass eine volatile Funktion immer neu berechnet wird, wenn eine Zelle im Arbeitsblatt neu berechnet wird.
Wir werden sehen, dass dies vollkommen fehlleitend ist. Die Neuberechnung erfolgt nämlich in allen möglichen Situationen!
Aber was hat dies nun mit reinem Excel zu tun?
Auch Excel selbst hat volatile Funktionen, z.B. Heute(), Jetzt(), Indirekt() ...
Und wir werden sehen, dass diese sich ähnlich verhalten, wie benutzerdefinierte Funktionen mit Volatil.
Ein kleiner erster Schock gefällig?
Öffnen Sie zwei leere Arbeitsmappen (sonst keine offen, wie oben gesagt) und stellen Sie in einer Arbeitsmappe folgendes her:
Tabelle1
Das Format der Zelle B2 ist
hh:mm:ss
Hinweis:
Das ich hier die Funktion Jetzt() benutze, hat einfach damit zu tun, dass Sie es besser sehen können, wenn was passiert.
Glauben Sie mir, dass auch jede andere volatile Funktion enstprechen neu berechnet wird, auch wenn sich der Wert nicht ändert (z.B. Heute() am selben Tag). Ich werde Ihnen dies später noch beweisen.
Merken Sie sich im folgenden immer den Wert in B2.
Bei jeder Aktion sollten Sie vorher eine Sekunde warten, um gegebenenfalls die Aktion zu sehen.
Gehen Sie nun auf irgendeine andere beliebige Zelle im Tabellenblatt und geben Sie dort etwas ein.
Sie sehen, dass sich die Zelle B2 neu berechnet.
Jetzt() ist also eine volatile Funktion - aber wie volatil werden wir gleich sehen!
Gehen Sie nun auf ein anderes Arbeitsblatt der selben Mappe und wieder zurück.
Sie werden sehen, durch einen Blattwechsel passiert nichts (auch bei einem Arbeitsmappenwechsel)
Jetzt wieder auf ein anderes Blatt und geben Sie dort etwas ein und wieder zurück.
Und was passiert? Die Zelle wurde neu berechnet - was ein Ding - und beweist ersteinmal,
dass es mit der Tabellenblattposition nichts zu tun hat.
Jetzt gehen wir in unsere andere offene Arbeitsmappe und geben dort irgendwo etwas ein - und wieder zurück.
Oh - welch Überraschung - B2 hat sich wieder neu berechnet.
Also hat dies auch nichts mit der Arbeitsmappe zu tun, sondern mit der ganzen Anwendung. Wenn ich Excel geöffnet habe und irgendwo etwas eingebe, dann werden also volatile Funktionen ausgelöst. Überrascht???
(Für die VBA-ler wird nun vielleicht etwas klarer, warum es Application.Volatil heißt)
Wenn Sie aber glauben, dass wäre alles, dann ziehen Sie sich mal warm an.
Wir sind wieder in unserem Tabellenblatt mit unserer Formel. Denken Sie immer an das warten und vorher schauen.
Gehen Sie nun auf eine beliebige leere Zelle und drücken Sie entfernen (Entf) - oh oh
Jetzt will ich Sie noch ein wenig bepinseln.
Nehmen Sie sich eine beliebige Zelle und benutzen Sie den Formatpinsel und auf eine andere Zelle das Format übertragen.
Na - gepinselt oder bepinselt?
Glauben Sie mir, es gibt noch mehr Aktionen, in welchen die Berechnung neu angestoßen wird. Ich kenne sie auch nicht alle. Aber experimentieren Sie nun mal selbst, bevor Sie weiterlesen.
Zwischengedanken
Normalerweise berechnet Excel Zellen nur dann neu, wenn entweder eine komplette Neuberechnung angestoßen wurde oder Zellen, die sich in der Formel der Zelle befinden, sich verändern (oder volatil sind!)
Steht in B2 = A1+A2 und in A1 und A2 einfach Zahlen, so wird B2 "normalerweise" nur angestoßen, wenn sich in den Vorgängerzellen ein Wert ändert. Und das ist gut so, denn sonst würden ja alle Formeln permanent neu berechnet werden.
Wie wir (ein wenig) gesehen haben, verhalten sich aber Zellen mit volatilen Funktionen da ganz anders.
Selbstverständlich und zu Recht werden Sie sagen: Das merke ich doch gar nicht, wenn in irgendeiner Zelle Jetzt() benutzt wird und sich diese neu berechnet.
Aber wir müssen ein wenig über den Tellerrand schauen.
Die Datenmengen werden immer größer, die Formeln immer komplizierter und es werden oft volatile Funktionen angewandt, ohne zu wissen, was diese für Folgen haben.
Immer öfter werden trickreiche Formeln geschrieben, um Hilfszellen zu vermeiden.
Und gerade in Matrixformeln findet man nicht selten die Indirekt() Funktion und diese ist eine absolut volatile Funktion.
Und wie sieht es eigentlich aus bei der bedingten Formatierung?
Dazu kommen wir später - denn wir werden sehen, dass die bedingte Formatierung noch viel teuflischer ist.
Gefühlte Langsamkeit
Um die Wirkung nachzuvollziehen, sollten Sie nun mit komplexen Formeln testen, die eine volatile Funktion beinhalten.
Es geht darum, Formeln zu kreieren, die ansich langsam sind - so langsam, dass man es spürt und unsere obigen Experimente mit der Jetzt() Funktion darauf anwendet.
Ein - wie gewohnt von mir - völlig verblödetes Beispiel:
Tabelle1Formeln der Tabelle |
Zelle | Formel | C2 | {=SUMME(ZEILE($3:$50002)/ZEILE(INDIREKT("1:"&50000)))} |
|
Enthält Matrixformel: Umrandende { } nicht miteingeben, sondern Formel mit STRG+SHIFT+RETURN abschließen! |
Matrix verstehen |
Diese Formel hat überhaupt keinen Sinn, außer das sie viele Berechnungen erhält und Indirekt verwendet.
Ziehen Sie diese nun bis ca. Zeile 100, je nach Rechnergeschwindigkeit weiter oder weniger.
Sie sollten sichtbar spüren, dass jede Eingabe auf dem Blatt eine Verzögerung hervorruft.
Testen Sie dann wieder wie gewohnt wie oben.
Volatil Plotter
Eine bessere Überschrift ist mir nicht eingefallen.
Hier habe ich ein kleines Tool entwickelt, welches in einem kleinen Bereich Formeln überwacht.
Dieses enthält Makros und Ihre Makroeinstellungen sollten so sein, dass Sie die Makros aktivieren können.
Der Quellcode ist ungeschützt.
Zuersteinmal der Download:
https://www.online-excel.de/excel/bspdown/Volatil_Plotter.zip
Im ersten Blatt der Mappe finden Sie folgendes (kann bei Ihnen aufgrund des Datums leicht anders aussehen):
Tabelle1 | A | B | C |
1 | Werte | Formeln | Zähler |
2 | 4 | 4 | 1 |
3 | 5 | 8 | 1 |
4 | 3 | 19.01.2009 09:38 | 1 |
5 | 19.01.2009 | 20.01.2009 | 1 |
6 | haus | haus | 1 |
7 | a6 | 19.01.2009 | 1 |
8 | 3 | 4 | 1 |
9 | 4 | 5 | 1 |
Ein paar Erklärungen dazu:
In Spalte A befinden sich Werte - außer A5 hier ist eine Formel.
In Spalte B sind Formeln, die sich auf Spalte A beziehen und zwei direkte Formeln in B4 und B7 (gelb), die nur eine Funktion beinhalten. Sie sehen dies aber schnell selbst.
In Spalte C ist der Funktionsplotter. Hier sollte immer hochgezählt werden, wenn die Berechnung in Spalte B angekickt wird.
Die grünen Zellen sind diejenigen, die sich auf volatile Funktionen beziehen.
Außerdem ist eine Schaltfläche - hier nicht abgebildet - RESET. Mit dieser sollten die Werte in C immer auf 1 zurückgesetzt werden.
Im Quellcode sind außer dem Hochzählen auch zwei benutzerdefinierte Funktionen, eine Volatil und eine Nichtvolatil.
Ändern Sie z.B. den Wert in Zelle A2 und beobachten Sie, was sich bei den Zählern verändert.
Führen Sie dann wieder unsere verschiedenen Tests aus, auf anderen Blättern, anderer Arbeitsmappe etc... und beachten Sie die Veränderung in den grünen Zellen.
Eine besondere Aufmerksamkeit sollte man der Zelle B5 noch widmen.
Hier ist keine Volantile Funktion enthalten aber eine Formel mit einer Vorgängerzelle, die eine solche enthält.
Und man sieht, dass diese auch neu berechnet wird.
Alles weitere überlasse ich Ihnen.
Zum Quellcode will ich hier nichts sagen, denn dem VBA-Laie wird es nicht helfen und dem VBAler sollte er klar sein.
Kleiner Tipp für VBA-ler
Einfach mal eine Volatile benutzerdefinierte Funktion schreiben und innerhalb dieser noch eine Msgbox und diese in eine Zellformel einbinden. Wie immer sollten aber sonst keine Mappen offen sein.
Es kommen dabei auch ganz hübsche Effekte raus, z.B. dass eine Zelle anfängt zu blinken. Warum weiß ich auch nicht.
Fazit:
Vermeiden Sie volatile Funktionen wenn möglich.
Aber vor allem solche Formelkonstrukte, die eine hohe Berechnungsanzahl haben und durch volatile Funktionen ausgelöst werden.
Simple Berechnungen sind sehr schnell und nicht so kritisch (außer Sie haben sehr sehr viele davon).
Aber machen Sie es sich auch bewusst, dass durch die Abschaltung der automatischen Berechnung das Arbeiten in Excel angenehmer werden kann (wenn Sie Mappen geöffnet haben, die auf Grund von komplexen Berechnungen mit volatilen Funktionen langsam sind), mit dem Nachteil, dass Sie aktiv eine Neuberechnung anstoßen müssen. Dies ist für den Laien nicht immer ersichtbar und auch der Fortgeschrittene kann sich schnell mal wundern, warum eine Berechnung dann nicht aktualisiert wird.
(Wobei das Abschalten der automatischen Berechnung nur bei Zellformeln hilft, wie wir im nächsten Teil noch sehen werden)
Seien Sie sich bewusst, dass solche Neuberechnungen nicht Arbeitsmappenabhängig sind,
sondern in allen geöffneten Arbeitsmappen durchgeführt werden!
Seien Sie sich bewusst, dass Berechnungen von Zellen nicht nur durch Zelländerungen, sondern durch manigfache andere Aktionen ausgelöst werden können.
Mehr noch im Anhang unten.
Anhang 1 - Volatile Funktionen:
Diese Liste erhebt keinen Anspruch auf Vollständigkeit.
- Heute
- Jetzt
- Zufallszahl
- Indirekt
- Bereich.Verschieben
- Zelle
- Info
Anhang 2 - Auslösende Aktionen
Hier nur ein paar Beispiele für Auslöser von Berechnungen von volatilen Zellen:
- Zelleingaben
- Löschen
- Kopieren und einfügen
- Formatkopie
- Sortieren
- Filtern
- Zellen einfügen
- Zellen löschen(hier sogar 2 *)
- Namen einfügen/Löschen
- Tabellenblatt löschen
Weitere Artikel der Gruppe: Tutorials Aus Excel Standard
Nach oben