Страницы: Пред. 1 2
RSS
Какие комплектующие ПК влеяют на скорость обработки данных в Таблице
 
Цитата
JeyCi написала: на 20сек. увеличилось время открытия
Интересный результат :)
Возможно, по каким-то причинам условие в if срабатывает каждый раз при открытии книги и запускается Application.CalculateFullRebuild, но так не должно быть.
Можете проверить, например, добавив MsgBox перед Application.CalculateFullRebuild ?
Согласно MSDN метод CalculateFullRebuild аналогичен переписыванию заново всех формул во всех открытых книгах.
Зависимости в книге можно переписать еще, путем открытия книги архиватором, удаления внутри в папке XL файла зависимостей формул calcChain.bin а затем загрузки книги в Excel - calcChain.bin при этом создается заново.
В любом случае, спасибо Вам, что отметили проблему и хорошо, что была резервная копия.
.
 
Цитата
ZVI написал: Можете проверить, например, добавив MsgBox перед Application.CalculateFullRebuild ?
ZVI, к сожалению, уже не смогу... боюсь  :oops: ... (боюсь, когда не понимаю)... в любом случае  :D выявила на злосчастном листе всего 2 "задумчивые" формулы (которые вешают всё)... осталось написать под них udf (или оптимизировать) - и выходные будут плодотворны
... всем спасибо за участие... пошла снова оптимизировать
... ДЛЯ ТС: может и у вас проблема в какой-то мелочи?..
Изменено: JeyCi - 15.05.2016 11:06:17
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написала: выявила на злосчастном листе всего 2 "задумчивые" формулы (которые вешают всё)... осталось написать под них udf (или оптимизировать)
Прекрасный пример отношения к проблемам - проанализировать причины и сделать лучше, чем было! :)
 
Цитата
ZVI написал: Возможно, по каким-то причинам условие в if срабатывает каждый раз при открытии книги и запускается Application.CalculateFullRebuild, но так не должно быть... В любом случае, спасибо Вам, что отметили проблему
в свете обстоятельств, открывшихся из #32, - всё может быть, что FullRebuild ещё больше портил то, что и так плохо работало... поэтому доп 20сек да на предыдущие 20 - от чего угодно могли навернуться на файл... (т.е. может это и не проблема, а закономерный итог)... думаю, Microsoft может спать спокойно  :) - не доказано, что FullRebuild не работает... (наверно, работает, но не у меня - у меня сработало другое)

my case
Изменено: JeyCi - 15.05.2016 20:08:52
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
... ДЛЯ ТС: может и у вас проблема в какой-то мелочи?..

Последнее сообщение ТС - №5 :) По ходу он уже давно решил свою проблему)
 
Цитата
JeyCi написал: также выборку для массивных формул сократила в 5 раз (sql-запросом в промежуточную таблицу), но ещё подумаю, может доп. столбец к исходной бд добавить (чтобы легко по ней бегать, без промежуточной выборки)...
но всё-таки зафиксирую результат последнего тестирования по "my case"... просто если использовать доп столбец для выставления 1/0 по совокупности 3х (столбцов) условий... то, оно-то быстрее, чем их всех прописывать в массивную формулу (лучше сослаться на этот 1 доп. столбец)...
НО простое создание промежуточной таблицы sql-запросом по этим интересующим столбцам и далее привязка всех формул на неё - всё-таки ещё в 2 раза увеличило скорость открытия файла (т.е. по факту 5-кратного сокращения выборки для обработки формулами массива (~шт 80 формул)... т.е. отмеченный вариант показал лучшие результаты, чем доп. столбец...
эксперимент, конечно, не совсем чистый, потому что файл не совсем чистый  :) (ещё много всего др. есть (было описано под спойлером)... но всё-таки фактически засвидетельствованный... для истории  8)  (к слову о мелочах)
Изменено: JeyCi - 17.05.2016 21:07:07
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
А время на сам sql-запрос учитывали? И еще: проверяли на летучесть? Летучесть возникает при использовании летучих функций либо при превышении лимита зависимостей (обычно происходит при множественных операциях с большими диапазонами). Потом еще нужно смотреть, что за формулы и что за решение с доп. столбцом :)
KL
 
Цитата
KL написал: А время на сам sql-запрос учитывали?
полное время с учётом всего (разница 5 и 10 сек - с ним и без)
Цитата
KL написал: проверяли на летучесть?
её в принципе не использую обычно... вряд ли где-то что-то затесалось
Цитата
KL написал: либо при превышении лимита зависимостей
вроде не должно быть сильно длинных логических цепочек зависимостей...
подвисает формула расчёта паритета (когда по сути из плоской таблицы надо получить 2-х столбцовый pivot массив по критериям [+ ещё 1 столбец идентификатор] и провести линейные расчёты по горизонтальной размерности) и выбрать min из массива-итога по модулю... как-то так
p.s.
пока ещё склоняюсь к тестированию (если получится) возможности не выводить промежуточную выборку sql-запросом, а сформировать её на лету в именованный диапазон... только не знаю будет ли он сам каждый раз пересчитываться при пересчёте формул на его основе?
p.s. замена была простая
Код
*(Opt!$D$2:$D$3043="American")*(Opt!$H$2:$H$3043=$C$1)*(Opt!$G$2:$G$3043=$B$1)
на
Код
*(Opt!$W$2:$W$3043=1)
столбец W в общей таблице по факту 3-х условий выше  
Изменено: JeyCi - 19.05.2016 13:13:21
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Тройное условие лучше заменить на 3 столбца. Попробуйте конкатенацию в четвертом столбце (массив поиска и условие, оба с каким-нибудь делимитером) и функцию ПОИСКПОЗ()

Например: =ПОИСКПОЗ("American"&"|"&$C$1&"|"&$B$1;Opt!$D2&"|"&Opt!$H2&"|"&Opt!$G2;0)
Изменено: KL - 19.05.2016 13:29:09
KL
 
Цитата
KL написал:  Попробуйте конкатенацию в четвертом столбце
вобщем-то по сути я пробовала (Opt!$W$2:$W$3043=1) в "4"-м столбце исходной таблицы... и это как условие для формирования массива в итоговую формулу (а не проверять те 3), просто посмотреть наличие единицы... а она сама в исходной таблице появляется из проверки (указала выше) на листе-назначения всего по 3-м фиксированным ячейкам в которых лишь указан интересующий параметр данных из базы (грубо говоря интересующая дата контракта на сегодняшний день - обычно интересует конкретная неделя конкретного месяца, остальные будут нужны в др. день - тогда и будет выбран др. из выпад.списка итогового-листа)... --> и уже соотв-ие этому критерию данные и обсчитываются формулами-массива далее на итоговом-листе... но спасибо и за ваш вариант (где-то и его использовала в СУММЕСЛИ с добавлением др. параметров... пересмотрю ещё раз всё
p.s. хотя да, наверно, и там можно конкатенировать на этапе проверки, чтобы не обременять исходную таблицу перемножением 3х столбцов... поправлю... thanks ... и по сути потом ПОИСКПОЗ по единице делаю
Изменено: JeyCi - 19.05.2016 14:28:13
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Добрый день. А как же быть если исходный файл весит 130 мб?? "Любые" формулы очень долго считаются, удалять лишние столбцы для уменьшения объема -  нельзя!
Изменено: Casl1986 - 07.03.2017 05:13:34
 
Цитата
Casl1986 написал: "Любые" формулы очень долго считаются
Можно попытаться оптимизировать формулы, в первую очередь.
Для ускорения загрузки  лучше использовать XLSB формат, измерение размера файла подкачки еще может помочь - см. здесь.
Но радикально уменьшить размеры файла и ускорить расчета помогут макросы.
 
Если взаимосвязи между формулами листов несложные, то оперативную работу можно ускорить отключением пересчета формул всех листов кроме активного.
Но придется периодически пересчитывать все листы для восстановления зависимостей.
Для этого приведенный ниже код нужно скопировать в модуль ЭтаКнига
Код
' Put all the code into ThisWorkbook (ЭтаКнига) module

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim Ws As Worksheet
  For Each Ws In Me.Worksheets
    Ws.EnableCalculation = False
  Next
  Sh.EnableCalculation = True
End Sub
 
' Call this macro to recalculate formulas in all sheets
Sub RestoreCalculations()
  Dim Ws As Worksheet
  For Each Ws In Me.Worksheets
    Ws.EnableCalculation = True
  Next
End Sub

Для пересчета формул всех листы - нажать Alt-F8 и выполнить макрос ЭтаКнига.RestoreCalculations
Изменено: ZVI - 07.03.2017 09:41:32
 
Спасибо. Буду пробовать
Страницы: Пред. 1 2
Наверх