Вопрос
Можно ли эффективно смоделировать результат application.calculate
из VBA, но игнорируя изменчивые функции?
Деталь
Определение: энергонезависимый эквивалент: Для любой энергозависимой рабочей книги определите энергонезависимый эквивалент как рабочую книгу, в которой все ячейки с энергозависимыми ссылками были заменены их необработанными значениями.
Определение: различия в энергонезависимых вычислениях: Предположим, у нас есть какая-либо рабочая книга. Теперь предположим, что мы взяли его энергонезависимый эквивалент и сделали полный пересчет по этому вопросу. Возьмем ячейки, значения которых изменились в энергонезависимом эквиваленте, и их значения. Это энергонезависимые расчёты различий.
Вопрос задаёт это. Существует ли способ эффективного применения только нелетучих различий для любой книги с потенциальными летучими ссылками? Эффективность является ключевой здесь - это единственная причина, по которой мы стремимся игнорировать изменчивые функции - см. Пример использования ниже. Поэтому любое решение, которое не превосходит полный пересчет, бесполезно.
Вариант использования
У нас есть рабочая книга, которая используется INDIRECT
. INDIRECT
- нестабильная функция Excel. В книге содержится около 300 000 таких книг, в которых содержится около 1,5 миллиона использованных ячеек. У нас нет возможности изменить это. В результате этих INDIRECT
использований наша Рабочая тетрадь занимает много времени для пересчета. Около 10 секунд. Таким образом, у нас отключен автоматический расчет, и пользователи периодически нажимают на калькуляцию вручную, чтобы обновить данные по ходу работы.
Наши бизнес-пользователи согласны с этим, но некоторые из новых функций VBA, которые мы добавляем, могут использовать что-то более эффективное, чем 10-секундное ожидание.
Что мы уже пробовали
Sheet.Calculate
- это удобно в некоторых случаях. И мы используем это. Но он обрабатывает данные на всех других листах как значения, а не как формулы. Поэтому, если есть какие-либо зигзагообразные ссылки, это не дает полностью согласованного результата. Например. представьте себе ссылку из листа A -> лист B -> лист A: тогда нужно будет рассчитать лист A, затем B, затем A. Число зигзагов произвольно. И это только один случай с двумя листами. Чтобы решить эту проблему, необходимо существенно переписать весь расчет Excel.