Страницы: 1
RSS
Не работает пересчет формул
 
Всем привет!

Пожалуйста, помогите идеями ЧТО произошло и КАК бороться. Имеется файл с порядка 20 листами (на каждом достаточно формул, порядка 2000 строк вычислений на каждом листе). Каждый из листов соответствует городу. Есть страновые листы, на которые подтягивается информация по городам соответствующих стран. Есть "глобальные листы", на которые подтягивается дата по странам. И есть dashboard - один лист, на котором в виде срезов представлена разная информация с обилием формул INDIRECT (ДВССЫЛ).

Ситуация: файл "весит" порядка 26 Мб. Но из-за обилия формул пересчитывается секунд 25. С этим можно смириться. Но в определенный момент при попытке добавить копию еще одного из страновых листов файл перестает пересчитываться. Не реагирует ни на F9, ни на ALT+SHIFT+F9. Пересчет формул - автоматический. Методом тыка увидел две ситуации при попытке отключить и включить автоматический пересчет (с целью заставить файл пересчитать все формулы):
1) Внизу справа появляется прогресс пересчета и так и остается на 0%. После 20 минут ожидания и щелчком парой клавиш Excel прекращает работу.
2) Прогресс появляется и тут же исчезает. Файл не зависает, но и не пересчитывает формулы.
3) Если включить ручной пересчет и пересчитывать по очереди каждый лист - пересчет срабатывает.

Х-ки - Windows 10 Enterprise (64 bit), 16 Гб DDR4, 8-ядерный процессор Core i7 8-го поколения. То есть вроде вычислительных мощностей хватает. Я видел и потяжелее файлы раз так в 6, и ничего, пересчитывались со скрипом. Есть ли идеи ЧТО могло произойти?
 
на любую вычислительную мощь можно навесить непосильное количество формул
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
colonel написал:
ЧТО могло произойти?
я думаю произошло это
Цитата
colonel написал:
с обилием формул INDIRECT (ДВССЫЛ)
из этого можно сделать вывод, что формулы далеко не оптимальны и при каждом чихе на любом листе происходит пересчет кошмарного кол-ва формул. Первое, что надо сделать - пересмотреть подход.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А нет ли идей, как обойтись без INDIRECT? Модель должна быть гибкой в плане добавления/удаления городов и стран. То есть набор листов не постоянен и не получится создать прямую связь с листом формулами типа VLOOKUP или INDEX. Во вложении пример того, ЧТО имеется в виду.
 
colonel, а данные на листах (города) всегда одинаково расположены и в одинаковой последовательности???
Значение 1Значение 2Значение 3
Изменено: Mershik - 27.02.2020 12:32:31
Не бойтесь совершенства. Вам его не достичь.
 
Да. Все листы городов выглядят идентично и данные всегда в одних и тех же местах.
 
набросок в файле растянуть вправо и вниз
1. проблема придется в выборе прописать один раз 20 листов
2. проблема пока не придумал нумерация существующих листов
Код
=ЕСЛИОШИБКА(ИНДЕКС(ВЫБОР($B3;А!$B:$D;Б!$B:$D;Г!$B:$D;Е!$B:$D);3;СТОЛБЕЦ()-3);)
Лень двигатель прогресса, доказано!!!
 
colonel, вариант еще
Код
Sub polistam()
Dim sh As Worksheet
Dim ilastrow As Double
Worksheets("Dashboard").Range("C3:F" & Cells(Rows.Count, 6).End(xlUp).Row).ClearContents
For Each wh In Worksheets
   ilastrow = Worksheets("Dashboard").Cells(Rows.Count, 3).End(xlUp).Row + 1
   If wh.Name <> "Dashboard" Then
   Worksheets("Dashboard").Cells(ilastrow, 3) = wh.Name
   Worksheets("Dashboard").Cells(ilastrow, 4) = Worksheets(wh.Name).Cells(3, 2)
   Worksheets("Dashboard").Cells(ilastrow, 5) = Worksheets(wh.Name).Cells(3, 3)
   Worksheets("Dashboard").Cells(ilastrow, 6) = Worksheets(wh.Name).Cells(3, 4)
   End If
Next wh
End Sub
Изменено: Mershik - 27.02.2020 12:51:54
Не бойтесь совершенства. Вам его не достичь.
 
Сергей, вы решили конкретно этот пример :) А в реале все гораздо сложнее. Я просто набросал примерчик проблемы: данные, на которые надо сослаться, хранятся на другом листе. Которого может и не существовать

Mershik, я не умею пользоваться макросами, плюс ими не умеет пользоваться заказчик этой работы.

Переформулирую вопрос: нет ли других способов обратиться к к листу, которого может и не существовать? То есть интересуют еще функции, у которых в качестве одного из аргументов является имя листа.
Страницы: 1
Наверх