2

У меня есть довольно большой лист Excel, в котором отслеживаются наши соревнования по гольфу. Чтобы ускорить лист (для использования на моем старом ноутбуке), я пытаюсь ограничить количество автоматических вычислений. Например, общая оценка рассчитывается только если вы введете последнюю лунку.

Тем не менее, мое «Немедленное окно» показывает, что после каждой записи выполняется много вычислений. Кажется, где-то есть изменчивая функция. Я искал и заменил все функции, которые, как известно, являются летучими (я использовал INDIRECT и OFFSET). Я проверил все мои именованные диапазоны на OFFSET (и удалил его). Я даже заменил все функции ROW и COLUMN, хотя MS утверждает, что они не являются энергозависимыми.

Тем не менее, Excel пересчитывает весь лист после каждой записи, и я не могу найти источник.

Я использую Excel 2016 (голландская версия) под Windows 7. Я использую пару UDF (которые дают мне обратную связь о текущих вычислениях) для простых вычислений. Все данные для UDF передаются в качестве параметров.

Есть ли способ отследить источник нестабильных расчетов на листе?

Мой лист можно найти на http://www.wacgolf.nl/docs/WAC%202016.xlsm. Он заполнен тестовыми баллами до листа «25-6». После ввода любого счета в этом листе весь рабочий лист пересчитывается.

Я выделил файл calcChain.xml, который должен содержать цепочку расчетов. Но я не вижу, где начинается моя проблема. Любая помощь высоко ценится.

calcChain.xml

2 ответа2

2

После некоторых поисков я пришел к выводу, что это не были мои UDF, которые были нестабильны. Оказалось, что это ссылка в виде:

INDEX([named range],[row],[col])

Если я заменю эту ссылку на прямую ([sheet]! [Col] [row]) расчеты прекращаются. Является ли это функцией INDEX или именованным диапазоном или комбинацией двух, я не знаю. Я использую много именованных диапазонов и много ссылок INDEX на именованные диапазоны. Я не могу заменить их всех, чтобы выяснить, в чем дело. Кстати, названный диапазон является фиксированным диапазоном. Смещение () нигде не используется в моем листе.

1

Расширяя мой комментарий, вы абсолютно правы насчет изменчивых функций. Но эти изменчивые функции являются вашими собственными пользовательскими функциями - Excel не может знать, являются ли они изменчивыми или нет, и поэтому должен рассматривать их как изменчивые, пересчитывая их каждый раз, когда вы вносите какие-либо изменения в книгу. А поскольку VBA работает медленнее, чем функции листа, это действительно замедлит ваши вычисления.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .