Home HomeXLimits - Hauptseite


Limitationen von benutzerdefinierten Excel-Funktionen  (Diese Seite ist in Bearbeitung)

Inhaltsübersicht

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

Weitere Informationsquellen


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

Limitationen von Excel-Tabellenfunktionen

To Top

 


Ü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.

To Top

 


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

To Top

 


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.)

 

To Top

 


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

...

To Top

 


Weitere Informationsquellen

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

To Top


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