У меня есть 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