Aktualisieren einer UDF, bei der ich im Voraus die Zellen kenne, die möglicherweise das Ergebnis ändern, bei denen es sich jedoch nicht um direkte Parameter handelt

Aktualisieren einer UDF, bei der ich im Voraus die Zellen kenne, die möglicherweise das Ergebnis ändern, bei denen es sich jedoch nicht um direkte Parameter handelt

Ich habe eine UDF, die den Wachstumsübertrag über ein Jahr berechnet. Das ist zum Beispiel die jährliche Wachstumsrate im zweiten Quartal eines Jahres, wenn das Wachstum im dritten und vierten Quartal null ist. In diesem Fall bräuchte ich das Wachstum der vierten Quartale des Vorjahres und der ersten beiden Quartale des laufenden Jahres.Bildbeschreibung hier eingeben

Dies ist nicht sehr schwer zu berechnen oder zu programmieren. Um leicht zugänglich zu sein, haben die Leute, für die es bestimmt ist, weitgehend bevorzugt, dass nur der letzte beobachtete Punkt ein Input der Funktion sein sollte. Ein anderer Input ist die Anzahl der Quartale der beobachteten Daten, die ich habe. In diesem Fall wäre esCarryOver(C16,2)

Wenn sich bei dieser Vorgehensweise ein anderer vergangener Wert ändert, wird meine UDF nicht aktualisiert. Ich kann das erzwingen, indem ich verwende, Application.Volatileaber zunächst scheint es nicht zu funktionieren, wenn der verwendete Wert auf einer Formel basiert, die auf ein anderes Blatt verweist. Und grundsätzlicher kann ich im Voraus berechnen, welche Zellen mit den beiden Eingaben verwendet werden (Zelle der letzten Daten, Anzahl der Quartale, die ich habe, also in diesem Fall : C11:C16), also könnte es eine Möglichkeit geben, Excel anzuweisen, diese UDF jedes Mal zu berechnen, wenn sich einer der Werte in den implizierten Zellen ändert, was besser wäre als die volatileOption. Ist das machbar?

EDIT: Der Kern meiner UDF wäre:

Public Function CarryOver(DerniereDonneeDure As Range, AcquisAuMoment_T_plus_X As Integer)


Dim Trim As Double
Trim = 100
        Ligne = DerniereDonneeDure.Row - AcquisAuMoment_T_plus_X + 1
        Colonne = DerniereDonneeDure.Column
        For i = -4 To -1
            Trim = Trim * (1 + Cells(Ligne + i, Colonne).Value)
            Ecoule = Ecoule + Trim
        Next
        For j = 0 To AcquisAuMoment_T_plus_X - 1
            Trim = Trim * (1 + Cells(Ligne + j, Colonne).Value)
            Encours = Encours + Trim
        Next
        For j = AcquisAuMoment_T_plus_X To 3
            Encours = Encours + Trim
        Next
    Acquis = Encours / Ecoule - 1

End Function

verwandte Informationen