Actualizar una UDF donde conozco de antemano las celdas que posiblemente cambiarán el resultado, pero que no son parámetros directos

Actualizar una UDF donde conozco de antemano las celdas que posiblemente cambiarán el resultado, pero que no son parámetros directos

Tengo una UDF que calcula el arrastre del crecimiento durante un año. Es decir, por ejemplo, en el segundo trimestre del año, la tasa de crecimiento anual si el crecimiento en el tercer y cuarto trimestre es nulo. En este caso necesitaría el crecimiento del cuarto trimestre del año anterior y los dos primeros trimestres del año actual.ingrese la descripción de la imagen aquí

Esto no es muy difícil de calcular o programar. Para ser fácilmente accesible, las personas a las que está destinado han favorecido en gran medida que sólo el último punto observado sea una entrada de la función. Otra entrada es la cantidad de trimestres de datos observados que tengo. En este caso seríaCarryOver(C16,2)

Con esta forma de hacer si cambia otro valor pasado no actualiza mi UDF. Puedo forzar eso usando Application.Volatilepero primero no parece funcionar si el valor usado se basa en una fórmula que hace referencia a otra hoja. Y lo que es más fundamental, puedo calcular de antemano qué celdas se usarán con las dos entradas (celda de los últimos datos, número de trimestres que tengo, en este caso:), C11:C16por lo que podría haber una manera de decirle a Excel que calcule esta UDF. cada vez que uno de los valores en las celdas implícitas cambia, cuál sería mejor que la volatileopción. ¿Es eso factible?

EDITAR: el núcleo de mi UDF sería:

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

información relacionada