Обновить UDF, где я заранее знаю ячейки, которые, возможно, изменят результат, но не являются прямыми параметрами

Обновить UDF, где я заранее знаю ячейки, которые, возможно, изменят результат, но не являются прямыми параметрами

У меня есть UDF, которая вычисляет перенос роста за год. Например, во втором квартале года годовой темп роста, если рост в третьем и четвертом кварталах равен нулю. В этом случае мне понадобится рост за четвертый квартал предыдущего года и два первых квартала текущего года.введите описание изображения здесь

Это не очень сложно вычислить или запрограммировать. Чтобы быть легкодоступным, люди, которым это предназначено, в значительной степени предпочли, чтобы только последняя наблюдаемая точка была входом функции. Другим входом является количество кварталов наблюдаемых данных, которые у меня есть. В этом случае это было быCarryOver(C16,2)

При таком подходе, если другое прошлое значение изменится, это не обновит мою UDF. Я могу принудительно это сделать, используя , Application.Volatileно сначала это, похоже, не сработает, если используемое значение основано на формуле, которая ссылается на другой лист. И что еще более важно, я могу заранее рассчитать, какие ячейки будут использоваться с двумя входными данными (ячейка последних данных, количество кварталов, которые у меня есть, так что в этом случае : C11:C16), поэтому может быть способ указать Excel вычислять эту UDF каждый раз, когда одно из значений в подразумеваемых ячейках изменяется, что было бы лучше, чем этот volatileвариант. Это выполнимо?

EDIT: ядро ​​моего UDF будет таким:

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

Связанный контент