Benutzerdefinierte Funktion berechnet möglicherweise keinen erwarteten Wert in Excel
Artikel
Gilt für:
Microsoft Excel
Symptome
Wenn Sie Ihr Arbeitsblatt berechnen, scheinen einige Zellen möglicherweise den falschen Wert berechnet zu haben.
Ursache
Dieses Problem tritt auf, wenn folgende Bedingungen vorliegen:
Eine Zelle im Arbeitsblatt enthält eine benutzerdefinierte Funktion.
Die benutzerdefinierte Funktion enthält mindestens ein Argument, das auf einen Zellbereich im Arbeitsblatt verweist.
Das Ergebnis der benutzerdefinierten Funktion hängt von mehr Zellen ab, als direkt referenziert werden.
Dieses Verhalten ist von Microsoft Excel beabsichtigt. Wenn Excel die Zelle berechnet, die die benutzerdefinierte Funktion enthält, werden alle Zellbereiche neu berechnet, die als Argumente an Ihre benutzerdefinierte Funktion übergeben werden. Wenn das Ergebnis Ihrer Funktion von Zellen abhängt, auf die nicht explizit von der Funktion verwiesen wird, werden diese Zellen möglicherweise nicht neu berechnet.
Problemumgehung
Verwenden Sie eine der folgenden Methoden, um dieses Problem zu umgehen.
Methode 1: Ändern Sie Ihre Funktion, sodass alle relevanten Zellbereiche übergeben werden.
Ändern Sie Ihre Funktion so, dass alle Zellen, die zum Berechnen des Ergebnisses der Funktion erforderlich sind, als Argumente akzeptiert werden.
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionsfähigkeit sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Microsoft-Supporttechniker können ihnen helfen, die Funktionalität eines bestimmten Verfahrens zu erklären, aber sie werden diese Beispiele nicht ändern, um zusätzliche Funktionen bereitzustellen oder Verfahren zu erstellen, die Ihren spezifischen Anforderungen entsprechen. Wenn Sie Ihre benutzerdefinierte Funktion veränderlich machen, tritt dieses Problem nicht auf. Fügen Sie der Funktion die folgende Codezeile hinzu, um ihre benutzerdefinierte Funktion flüchtig zu machen.
VB
Application.Volatile
Hinweis
Wenn Sie Ihre benutzerdefinierte Funktion flüchtig machen, wird sie jedes Mal neu berechnet, wenn Sie eine Änderung an einem Wert vornehmen oder eine geöffnete Arbeitsmappe neu berechnen. Dies kann sich auf die Leistung Ihres Arbeitsblattmodells auswirken.
Methode 3: Erzwingen der Neuberechnung aller geöffneten Arbeitsmappen durch Excel
Drücken Sie STRG+ALT+F9, um die Werte in allen geöffneten Arbeitsmappen neu zu berechnen. Drücken Sie in Microsoft Office Excel 2007 STRG+ALT+UMSCHALT+F9, um die Werte in allen geöffneten Arbeitsmappen neu zu berechnen.
Weitere Informationen
Beispiel für das Problem
Führen Sie die folgenden Schritte aus, um dieses Problem zu veranschaulichen:
Schließen und speichern Sie alle geöffneten Arbeitsmappen, und öffnen Sie dann eine neue Arbeitsmappe.
Starten Sie die Visual Basic-Editor (drücken Sie ALT+F11).
Klicken Sie im Menü Einfügen auf Modul.
Geben Sie den folgenden Code in das Modulblatt ein:
VB
' This function counts the number of blank cells by starting from the cell ' referred to by the rngStartCell argument and moving up the column.Function FindTextUp(rngStartCell As Range) AsSingleDim iIndex AsIntegerFor iIndex = 0To100If rngStartCell.Value <> ""Then
FindTextUp = iIndex
ExitFunctionElseSet rngStartCell = rngStartCell.Offset(-1, 0)
EndIfNext iIndex
EndFunction
Drücken Sie ALT+F11, um zu Excel zurückzukehren.
Geben Sie test in Zelle A2 ein, und drücken Sie dann die EINGABETASTE.
Geben Sie die folgende Formel in Zelle A10 ein, und drücken Sie dann die EINGABETASTE:
excel
=FindTextUp(A9)
Die Formel gibt den Wert 7 zurück.
Geben Sie In Zelle A5 einen anderen Test ein, und drücken Sie dann die EINGABETASTE.
Die Formel gibt weiterhin einen Wert von 7 zurück, wenn ein Wert von 4 erwartet wird. In diesem Beispiel bezieht sich die FindTextUp-Funktion explizit auf Zelle A9. Die Funktion kann jedoch abhängig von den in das Arbeitsblatt eingegebenen Daten von den Zellen A1:A8 abhängen.
Wenn Sie Methode 1 im Abschnitt "Problemumgehung" dieses Artikels implementieren, berechnet die Funktion das erwartete Ergebnis. Die folgende Codezeile veranschaulicht, wie die Funktion in diesem Beispiel so geändert wird, dass das erwartete Ergebnis berechnet wird.
VB
Function FindTextUp(rngStartCell As Range, rngOtherCells As Range) AsSingle
Wenn Sie nun den Funktionsaufruf in Schritt 7 durch den folgenden Funktionsaufruf ersetzen, gibt die Funktion immer das erwartete Ergebnis zurück.
Démontrez que vous avez les compétences nécessaires pour tirer le meilleur parti d’Excel 2019 en obtenant la certification d’expert de Microsoft Office Specialist (MOS).