Limitationen von benutzerdefinierten Excel-Funktionen (Diese Seite ist in Bearbeitung)
Limitationen
von benutzerdefinierten Funktionen
Übersicht
der Limitationen von benutzerdefinierten Funktionen
Einschränkungen
von Aktionen in benutzerdefinierten Funktionen
Einschränkungen
beim Benennen von benutzerdefinierten Funktionen
Empfehlungen
und Tipps zum Entwickeln von benutzerdefinierten Funktionen
Limitationen von benutzerdefinierten Funktionen
Seit Version 97 besitzt Microsoft Excel insgesamt 329 eingebaute Tabellenfunktionen, die in Formeln benutzt werden können.
Man kann jederzeit beliebige eigene Funktionen erstellen, indem man mittels VBA eine so genannte benutzerdefinierte Funktion schreibt. Die benutzerdefinierte Funktion wird dann in der gleichen Arbeitsmappe, in der persönlichen Makro-Arbeitsmappe Personl.xls oder in einem Add-In bereitgestellt. Beim Entwickeln des VBA-Programmcodes muss man ein paar Dinge beachten, weil auch benutzerdefinierte Funktionen mehrere Limitationen besitzen. Auf dieser Seite erhalten Sie eine ausführliche Beschreibung der massgebenden Limitationen und Spezifikationen.
Anmerkung des Autors
Die in allen Excelversionen identische Anzahl von 329
Tabellenfunktionen verleitet zur Annahme, dass seit Microsoft Excel 97 keine neuen
Funktionen hinzugekommen sind. Diese Annahme ist jedoch falsch. Die neueren Excelversionen
besitzen durchaus neue und verbesserte Funktionen. Diese befinden sich aber in Add-Ins und
nicht direkt in der Anwendung 'Microsoft Excel' in Form von integrierten
Tabellenfunktionen (engl. Built-In Sheet Functions). Der Vorteil ist, dass sowohl
Arbeitsmappen als auch VBA-Programme aller Excelversionen kompatibel sind.
Jede integrierte Tabellenfunktion besitzt eine eindeutige ID, die beim Speichern der Arbeitsmappe in der Exceldatei abgelegt wird. Angenommen, Microsoft hätte in Excel 2003 eine neue Funktion integriert, so hätte auch das von Arbeitsmappendateien verwendete Dateiformat BIFF erweitert werden müssen, weil eine neue ID für die neue Funktion benötigt wird. Eine mit Excel 2003 erstellte Mappe wäre dann aber nicht mehr mit den Vorgängerversionen kompatibel. Weil integrierte Tabellenfunktionen auch in VBA-Programmen benutzt werden können, hätte man zudem das Excel-Objektmodell ergänzen müssen. Dadurch wäre aber mit Excel 2003 geschriebener VBA-Code nicht mehr in allen Excelversionen lauffähig.
In der Microsoft Knowledge Base gibt es mehrere sehr gute
Artikel über die Neuerungen in den Statistikfunktionen von Excel 2003. Der Hauptartikel
Nr. 828888 "Description of improvements in the statistical functions in Excel 2003"
enthält Links zu den weiteren Artikeln. Falls Sie eine der nachstehenden Funktionen
einsetzen, sollten Sie die Artikel unbedingt lesen, da diese Funktionen in Microsoft Excel
2003 zum Teil andere Resultate liefern als in Excel bis Version 2002:
» BINOMDIST, CRITBINOM, HYPGEOMDIST, NEGBINOMDIST, POISSON,
VAR, VARP, STDEV, STDEVP, DVAR, DVARP, DSTDEV, DSTDEVP, FORECAST, SLOPE, INTERCEPT,
PEARSON, RSQ, STEYX, DEVSQ, CORREL, COVAR, CHIINV, LINEST, LOGEST, GROWTH, TREND, RAND,
NORMSDIST, CONFIDENCE, LOGINV, LOGNORMDIST, NORMDIST, NORMINV, NORMSINV, ZTEST, TTEST
(Analyse-Funktionen / Analysis Toolpack)
Hier finden Sie weitere Informationen über Tabellenfunktionen:
Weitere Informationen |
Übersicht der Limitationen von benutzerdefinierten Funktionen
Diese Tabelle zeigt die Limitationen und Spezifikationen von benutzerdefinierten Funktionen in Microsoft Excel.
| ID | Merkmal / Limitation | Spezifikation |
| 1 | Maximale Anzahl von benutzerdefinierten Funktionen | Excel 97: Durch den
verfügbaren Speicher begrenzt Excel 2000: Durch den verfügbaren Speicher begrenzt Excel 2002: Durch den verfügbaren Speicher begrenzt Excel 2003: Durch den verfügbaren Speicher begrenzt Im Prinzip kann man so viele benutzerdefinierte Funktionen schreiben und in einer Arbeitsmappe verwenden, wie Speicher verfügbar ist. Man darf jedoch nicht übermässig Speicher verbrauchen, da sonst für andere Vorgänge wie unter anderem für das Berechnen der Arbeitsmappe nicht mehr genügend Speicher zur Verfügung steht. Informationen über die Spezifikation "Durch den verfügbaren Speicher begrenzt" finden Sie auf der Seite Excel-Arbeitsspeicher. |
| 2 | Maximale Anzahl von Funktionsargumenten | Excel 97: 30 Argumente Excel 2000: 30 Argumente Excel 2002: 30 Argumente Excel 2003: 30 Argumente Eine benutzerdefinierte Funktion kann bis zu 30 Argumente entgegennehmen. Es gibt eine Möglichkeit, mehr als 30 Argumente zu verarbeiten, und zwar indem man ein Parameter-Array benutzt. |
| 3 | Maximale Länge eines Funktionsnamens | Excel 97: 255 Zeichen Excel 2000: 255 Zeichen Excel 2002: 255 Zeichen Excel 2003: 255 Zeichen Der Name einer benutzerdefinierten Funktion sollte nicht zu lang gewählt werden, auch wenn theoretisch 255 Zeichen zur Verfügung stehen. Gewöhnlich reichen 30 Zeichen ohne weiteres auch für aussagekräftige Namen aus. Vergessen Sie nicht, dass der Funktion Argumente übergeben werden. Je nach Länge des Funktionsnamens und der Anzahl/Länge der Argumente erhalten Sie dadurch eine sehr lange Formel. Beachten Sie bitte, dass die Formel in einer Zelle maximal 1'024 Zeichen lang sein darf. |
| 4 | Maximale Anzahl von Funktionen in einem Codemodul | Excel 97: Unbeschränkt Excel 2000: Unbeschränkt Excel 2002: Unbeschränkt Excel 2003: Unbeschränkt |
| 5 | Maximale Grösse des Programmcodes einer Funktion | Excel 97: 64 KB Excel 2000: 64 KB Excel 2002: 64 KB Excel 2003: 64 KB Wenn der kompilierte Code einer Funktion 64 KB übersteigt, erscheint die Fehlermeldung "Prozedur zu gross". |
| 6 | Maximale Anzahl Programmzeilen in einer Funktion | Excel 97: Unbeschränkt Excel 2000: Unbeschränkt Excel 2002: Unbeschränkt Excel 2003: Unbeschränkt Weitere Informationen siehe unter Limitationen in VBA- und VB-Projekten: Programmcode-Limitationen. |
Einschränkungen von Aktionen in benutzerdefinierten Funktionen
Benutzerdefinierte Funktionen, die von Zellformeln aufgerufen werden, können grundsätzlich keine Aktionen durchführen, die die Microsoft Excel-Anwendungsumgebung verändern. Das bedeutet, dass eine solche Funktion keine der folgenden Aktionen durchführen kann:
Nebenbei erwähnt können auch die in Microsoft Excel integrierten Tabellenfunktionen keine der obigen Aktionen durchführen. Sie können somit die Excel-Anwendungsumgebung ebenfalls nicht verändern.
A user-defined function called by a formula in a worksheet cell cannot change the environment of Microsoft Excel. This means that such a function cannot do any of the following:
The purpose of user-defined functions is to allow the user to create a custom function that is not included in the functions that ship with Microsoft Excel. The functions included in Microsoft Excel also cannot change the environment. Functions can perform a calculation that returns either a value or text to the cell that they are entered in. Any environmental changes should be made through the use of a Visual Basic subroutine.
Interessant ist, dass ein paar Methoden trotz dieser technischen Restriktion ausgeführt werden können und dabei zu keinem Fehler führen. Ohne Probleme funktionieren diese drei VBA-Codezeilen, auch wenn sie innerhalb einer benutzerdefinierten Funktion stehen:
1. Kommentar derjenigen Zelle hinzufügen, die die Funktion aufruft
Application.Caller.AddComment "Hallo Sie da"
2. Alle Kommentare löschen
Application.Caller.ClearComments
3. Einzug hinzufügen
Application.Caller.InsertIndent 1
Führt zu einer Rekursion (die sich jedoch selbst auflöst):
Application.Caller.Calculate
David Hager reports that the following Methods, when used in a custom function, can also make change to the workbook:
J-Walk: A user-defined function can't change the
worksheet. Or can it?
http://www.j-walk.com/ss/excel/odd/odd06.htm
Einschränkungen beim Benennen von benutzerdefinierten Funktionen
Keine Namen für Funktionen wählen, die bereits von integrierten Tabellenfunktionen benutzt werden (z.B. Summe, Wenn, Rest, Ersetzen usw.).
Wenn es nicht anders möglich ist, muss in der Formel vor dem Funktionsnamen der Name des Codemoduls angegeben werden, in welchem sich die benutzerdefinierte Funktion befindet.
Beispiel:
=basCustom.Summe(x)
Die integrierten Tabellenfunktionen von Excel haben Vorrang. Wenn man nur
=Summe(x)
schreibt, dann wird die integrierte Tabellenfunktion SUMME verwendet und nicht die gleichnamige benutzerdefinierte Funktion.
Keine Namen für Funktionen wählen, die für VBA-Funktionen stehen
(z.B. CStr, Array, Fix usw.)
Empfehlungen und Tipps zum Entwickeln von benutzerdefinierten Funktionen
Beim Entwickeln einer benutzerdefinierten Funktion sollte man insbesondere darauf achten, dass der Programmcode rebust und schnell ist, und möglichst wenig Speicher beansprucht.
Hier ein paar interessante Empfehlungen und Tipps.
Fehlerbehandlungsroutine in der Funktion verwenden
Fügen Sie in Ihre benutzerdefinierten Funktion unbedingt eine Fehlerbehandlungsroutine ein. Fangen Sie mögliche Laufzeitfehler mittels On Error Goto <Sprungmarke> oder On Error Resume Next ab.
Keine MsgBox innerhalb einer Funktion verwenden
Vermeiden Sie die Ausgabe einer Meldung anhand der MsgBox-Anweisung.
Kein ActiveCell innerhalb einer Funktion verwenden
Zum Herausfinden der aufrufenden Zelle kann man Application.Caller verwenden.
Datentyp des von der Funktion zurückgegebenen Wertes festlegen
...
Alle betroffenen Zellen als Argument übergeben
...
Nicht unnötig viele Argumente verwenden
Eine Funktion mit 11 Argumenten ist ca. 6 % langsamer als eine Funktion mit nur 3 Argumenten.
...
Funktionsargumente mit Datentyp deklarieren
Wenn der Datentyp nicht angegeben wird, wird der Default-Datentyp Variant verwendet.
25 % schneller
Funktionsargumente als Wert übergeben
Übergeben Sie Argumente als Wert statt als Referenz.
Ein paar wenige Prozent schneller
Optionale Argumente bestimmen
...
Default-Werte für Argumente festlegen
Der Standardwert eines Arguments kann nur dann festgelegt werden, wenn das Argument optional ist.
Nicht übergegebene Argumente behandeln
Ein nicht übergegebenes Argument kann mit IsMissing getestet werden. Das Argument muss optional sein. Der Datentyp darf nicht deklariert, und es darf kein Standardwert angegeben sein.
Nicht-zusammenhängende Zellbereiche behandeln
...
Funktionstüchtigkeit bei gruppierten Arbeitsblättern überprüfen
...
XL (all Versions): Description of limitations of
custom functions in Excel
http://support.microsoft.com/?scid=kb;en-us;170787
J-Walk: A user-defined function can't change the
worksheet. Or can it?
http://www.j-walk.com/ss/excel/odd/odd06.htm
Haben Sie Fragen,
Anregungen oder einen Fehler entdeckt?
Kontakt zum Autor
Zuletzt aktualisiert am
14.01.2006 / 23:00 Uhr
Zuletzt kontrolliert am 19.12.2008 / 17:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten