Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 18:13   #1
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Как ускорить расчеты формул???

Пожалуйста, помогите оптимизировать формулы или перевести их в макросы!!!

Суть проблемы:
Есть массив данных по продажам, кусок которого приведен в прикрепленном примере. Задача - в этом массиве вычислить клиентов, которые сделали отгрузку, соответствующую заданному условию (на листе "Условия"). То есть клиент должен взять три вида товара не менее двух штук каждого вида за установленный период.
Для этого есть 7 формул, которые вычисляют эту самую отгрузку, а именно:
1 формула. Определяет отгрузку 1 клиента в месяц (сцепляет 2 значения)
2. Определяет отгрузку 1 вида товара по 1 клиенту в месяц (сцепляет 3 значения)
3. Вычисляет по массиву, соответствует ли вид, канал сбыта и период условиям
4. Определяет, соответствует ли накопленная отгрузка каждого учитываемого вида товара минимальной выборке и отсекает повторения учета (то есть учитывается только 1 раз)
5. Учитывает каждый сработавший вид товара
6. Определяет кол-во видов товара, выбранного 1 клиентом и отсекает повторения учета (то есть учитывается только 1 раз)
7. Учитывает клиента, сработавшего по установленным условиям.

Ну соответственно обработка массива осуществляется макросом, который копирует формулу из 2 строки по столбцу и вычисляет значения.

Проблема состоит в том, что при массиве в 1000 строк макрос пару секунд, при массиве в 5000 строк - 5 минут, в 10 000 строк - 15 минут, а при массиве в 15 000 строк зависает из-за вычисления накопительных формул...
Помогите, как-нибудь решить эту проблему? Может как-то можно оптимизировать формулы или сделать аналогичные вычисления макросом?
Вложения
Тип файла: rar Пример.rar (10.3 Кб, 16 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 01.09.2009, 18:19   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А сам код макроса где?
motorway вне форума Ответить с цитированием
Старый 01.09.2009, 21:18   #3
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Motorway я прикрепил пример с макросом, но повторюсь: мне кажется, суть проблемы в формуле, а не в макросе... Макрос просто же копирует эту формулу...
Вложения
Тип файла: rar Пример1.rar (14.4 Кб, 21 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 01.09.2009, 21:30   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Иванов_ДМ.
работа с таблицами в 1000 строк это повод думать про Базы Данных, а Вы говорите о 15 000. Задача может быть выполнена и в Excel, но но стоит ли сооружать конструкцию с возможностями близкими к граничным для него.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 01.09.2009, 21:49   #5
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Евгений, спасибо за совет, но что имеем так сказать... увы, иных вариантов обработки такого массива у меня нет... Да и границы excel гораздо шире, чем кажутся со стороны.
Иванов_ДМ вне форума Ответить с цитированием
Старый 01.09.2009, 22:18   #6
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Не знаю, поможет или нет, можно вставить строку: Application.Calculation = xlCalculationManual, а в конце Application.Calculation = xlCalculationAutomatic
motorway вне форума Ответить с цитированием
Старый 02.09.2009, 04:53   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Не знаю, поможет или нет, можно вставить строку: Application.Calculation = xlCalculationManual, а в конце Application.Calculation = xlCalculationAutomatic
Это вряд ли. Потому, что после выполнения Application.Calculation = xlCalculationAutomatic, Excel начнет пересчет всех ячеек листа, которые до этого момента были запрещены.
Предлагаю вообще не использовать формулы. Все делать макросом (если, конечно, такой вариант приемлем). При этом скорость существенно увеличится (в десятки или сотни раз).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.09.2009, 09:53   #8
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

SAS888 вот вариант с макросом вместо формул как раз и приемлем!
Вопрос в том - как это сделать макросом? Моих знаний в этом случае не хватает...
Иванов_ДМ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ускорить программу ? juan666777 Общие вопросы Delphi 2 02.05.2009 19:48
Как ускорить работу программы SibBear Общие вопросы Delphi 7 27.03.2009 14:40
Платформы и расчеты Kenshi25 Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 29.12.2008 11:43
Как ускорить работу с сетевой БД Ramires БД в Delphi 3 21.08.2008 12:16
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12