Страницы: 1
RSS
Нужно автоматически определять и вычислять формулу по ключевому полю.
 
Добрый день.
Нужно автоматически определять и вычислять формулу по ключевому полю.

Для этого использую две таблицы.
Одна справочная (TabB). Она содержит два поля - ключ для ВПР и формулу расчёта для второй таблицы в виде текста.
Во второй (TabA) - значения, по которым проводится расчёт, ключ для ВПР и формула со ссылкой на имя вида "=@name",
в котором уже записана сама функция определения нужной формулы через ВПР

=ВЫЧИСЛИТЬ(ВПР(TabA[@Column];TabB;2;0))

Всё работает, но проблема в том, что вычисления не обновляются автоматически при изменении значений, по которым проводится расчёт в TabA.
Он пересчитывается только при обновлении в ячейке с ключом ВПР или самой ячейки  с формулой вычисления.

Кнопки "Пересчёт" и "Произвести вычисления" на панели формул тоже не дают результатов.
Подскажите, пожалуйста, как исправить ситуацию? Нужно, чтоб или автоматом пересчитывалось, или командой в макросе.

Знаю, что можно вместо функции ВЫЧИСЛИТЬ и ВПР вынести всё в пользовательскую функцию VBA, но читал, что они медленнее работают, а формулы расчёта сложные и диапазон может быть в десятки тысяч строк и может тормозить.
 
Цитата
Genadij Glebin написал:
Знаю, что можно вместо функции ВЫЧИСЛИТЬ и ВПР вынести всё в пользовательскую функцию VBA, но читал, что они медленнее работают,
Бывает так, а бывает иначе все зависит даже не столько от формулы и функций, сколько от количества вызовов и оптимизации расчетов.

Что касается Макрофункции Evaluate (Вычичлить) то для пересчета нужно добавить летучести, что приведет к пересчету , но побочный эффект пересчет будет когда надо и когда не надо. Делается это просто  Если результат числовой, то можно домножить на NOW()^0 например. NOW пересчитывается при каждом пересчете, а степeнь нулевая всегда будет давать результат 1 что не изменить конечный результат. Для текcтовых, примерно тоже: но нужно прибавить ничего ну например &IF(NOW();"")
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
для пересчета нужно добавить летучести, что приведет к пересчету , но побочный эффект пересчет будет когда надо и когда не надо
Спасибо, способ с домножением на NOW()^0 (в русифицированной версии ТДАТА()^0) работает.
Только не понимаю, чем это чревато, что за побочный эффект с пересчётом когда не надо? Или оно вычисляет непрерывно, даже когда значения не меняются и это может тоже нагрузить систему?  
 
Да, если не летучие формулы пересчитываются только тогда , когда меняются аргументы, то летучие при каждом пересчет , который может быть вызван как пользователем, так и при изменении данных, при этом даже в другой книге. Если расчет текущего времени и даты не сильно нагружает систему, то комбинация которую вы описываете может быть ресурсоемкой и пересчет может занимать заметное время что может сделать работу с файлом или даже с другими открытыми одновременно , невыносимой
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх