Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Методологический вопрос по фин. модели, Избавиться от циклической ссылки
 
Здравствуйте!

Есть модель рентабельности проекта:
- финансовые показатели рассчитываются ежегодно с учётом дисконтирования.
- добываем сколько-то лет полезные ископаемые, из-за истощения месторождения издержки растут, а выручка падает.
- в какой-то момент чистый денежный поток станет отрицательным - значит наступил конец рентабельного периода.
- во время разработки месторождения, то есть в рамках рентабельного периода, необходимо накопить сумму в фонд ликвидации месторождения.

Средства из фонда ликвидации месторождения будут использоваться для приведения окружающей среды в исходный вид (на поверхности). Требуемая сумма известна заранее - например 100 рублей. Но её надо раскидать внутри рентабельного периода - если он 10 лет, то каждый год надо откладывать по 10 рублей, а если 20 лет, то по 5 рублей.

Получаем циклическую ссылку:
а) период рентабельности зависит от затрат, в которые входят и отчисления в фонд ликвидации.
б) величина ежегодных отчислений в фонд ликвидации зависит от периода рентабельности.

Если в экселе поставить галочку на "Включить итеративные вычисления" то всё теоретически работает, а практически иногда падает, приходится вручную забивать начальное значение для итераций а потом восстанавливать формулу. Но сейчас столкнулся с тем, что если данная "циклическая цепочка" усложняется, то эксель просто отказывается работать, так как или ряд становится уже неоднозначно сходимый или у него просто крышу сносит.

Есть у многопытного местного общества идеи, как вообще методологически разрешить данную проблему? :)

PS
Если технически - то во вложении пример. Сейчас рентабельный период в нём определяется путём поиска самого последнего положительного значения дисконтированного денежного потока. Всё работает (ячейка E135, находит 14 лет), но в целом неверно - в предыдущие годы уже могут быть убытки такие, что не перекрывают этой прибыли. Я откорректировал расчёт на верный (нахожу год с максимальным значением накопленного денежного потока - ячейка F135 и 12 лет) и эксель уже отказывается считать. В примере чтобы перейти с работающего но некорректного алгоритма на верный, но неработающий надо в ячейке E135 вместо формулы написать "= F135" и весь лист покрывается "делением на ноль". MS Excel 2010
Зависимости для пользовательских функций, Управление порядком пересчёта
 
Здравствуйте!

Как известно, если пользовательская функция не все значения получает в качестве аргументов, а берёт что-то с другого листа, назовём его справочным, то при изменении данных в справочном листе пересчёта ячеек с пользовательской функцией автоматически не происходит.

Во вложении пример, в котором есть два листа.
На листе1 в колонку А записаны числа, в колонку В = MyFunc(A)

Пользовательская функция определена так - с ячейки А1 листа2 берём коэффициент умножения и возвращаем его произведение с аргументом:
Код
Public Function MyFunc(code As String) As String
    MyFunc = Worksheets("Лист2").Cells(1, 1) * code
End Function 
Как известно, в такой схеме после изменения ячейки листа2 автоматического пересчёта не происходит так, как например со встроенной функцией ВПР() .

Для решения этой проблемы я использую обработчик изменений листа2, в котором каждый рз принудительно помечаю к пересчёту весь диапазон, где может содержаться пользовательская функция.

Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Worksheets("Лист2").Range("B:B").Dirty
End Sub
Но это криво и долго.

Другим решением может быть передача в пользовательскую функцию всего диапазона с настройками с листа2, что несколько громоздко - например от аргумента зависит, в каких справочниках что искать будем.
Может существуют другие элегантные решения - например я отследил ввод пользовательской функции и сообщил экселю, что данная ячейка с пользовательской функцией зависит не только от своих аргументов, но ещё и от таких-то ячеек?
Изменено: ArtHome - 19.11.2014 18:23:31
Выпадающий список с источником из пользовательской функции, Указание пользовательской функции в источнике данных выдаёт ошибку
 
Здравствуйте!

Я создал пользовательскую функцию, которая возвращает текстовую строку, например "100;200;300" - количество элементов зависит от исходных данных.
Затем я нажимаю кнопку "Проверка данных" в экселе 2010, выбираю "значение из списка" и в "источнике" указываю свою пользовательскую функцию.
Облом - сообщение об ошибке "указанный именованный диапазон не найден". В более других местах эта моя функция прекрасно отрабатывает.

Что я делаю не так?
Страницы: 1
Наверх