|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.12.2017, 11:26 | #1 |
Математик
Форумчанин
Регистрация: 27.02.2011
Сообщений: 123
|
Ускорить макрос
Архив ZIP - WinRAR.zipДобрый день форумчане!
Выкладываю перед вами пример для понятия сути моей проблемы: На листе книги имеется таблица продажи. В первом столбце указан всклад, во втором -клиент, в третьем- сумма количество продаж- 162595 количество складов- 26 количество клиентов- 1139 Нужна было Чтоб в Четвертом в столбце выводились общие суммы для того клиента и для того всклада, которые записаны в конлретном в строке. Kонечно это можно сделать формулой " суммеслимного ", но многоразовое применение этой формулы перегружает книгу. Написал макрос с применением обычного цикла for to next, макрос тоже работает очень медленно (см. вложение). как я узнал for to next медленный цикл. Помогите пожалуста, если можно, ускорить этот макрос с применением более быстрого цикла (например for each) . Или же, можно решить этот вопрос с помощью надстройки Pover pivot. Ускорителей, таких как Application.ScreenUpdating = False. Application.Calculation = xlCalculationManual и тому подобное, прошу не предлагать, пожалуйста, так как с применением таких ускорителей, код все равно работает медленно. Архив ZIP - WinRAR.zip P.S. Я хочу ускорить код не за счот улучшения блок схемы кода, а за счот применения более быстрых инструментов вычисления, не только для этого конкретного случая, но и более большими данными. |
14.12.2017, 11:47 | #2 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
архив пустой
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
14.12.2017, 11:49 | #3 |
Математик
Форумчанин
Регистрация: 27.02.2011
Сообщений: 123
|
Добрый день форумчане!
Выкладываю перед вами пример для понятия сути моей проблемы: На листе книги имеется таблица продажи. В первом столбце указан всклад, во втором -клиент, в третьем- сумма количество продаж- 162595 количество складов- 26 количество клиентов- 1139 Нужна было Чтоб в Четвертом в столбце выводились общие суммы для того клиента и для того всклада, которые записаны в конлретном в строке Kонечно это можно сделать формулой " суммеслимного ", но многоразовое применение этой формулы перегружает книгу. Написал макрос с применением обычного цикла for to next, макрос тоже работает очень медленно (см. вложение). как я узнал for to next медленный цикл. Помогите пожалуста, если можно, ускорить этот макрос с применением более быстрого цикла (например for each) . Или же, можно решить этот вопрос с помощью надстройки Pover pivot. Ускорителей, таких как Application.ScreenUpdating = False. Application.Calculation = xlCalculationManual и тому подобное, прошу не предлагать, пожалуйста, так как с применением таких ускорителей, код все равно работает медленно. P.S. Я хочу ускорить код не за счот улучшения блок схемы кода, а за счот применения более быстрых инструментов вычисления, не только для этого конкретного случая, но и более большими данными. |
14.12.2017, 11:49 | #4 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Словари и массивы нужны. Файл не смотрел (тем более что говорят что пустой...)
webmoney: E265281470651 Z422237915069 R418926282008
|
14.12.2017, 11:58 | #5 |
Математик
Форумчанин
Регистрация: 27.02.2011
Сообщений: 123
|
целый архив не поместилось. пришлось срезать Часть таблицы
|
14.12.2017, 12:07 | #6 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Построил сводную таблицу на отдельном листе, использовал функцию
Код:
Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
14.12.2017, 12:25 | #7 | |
Математик
Форумчанин
Регистрация: 27.02.2011
Сообщений: 123
|
Цитата:
|
|
14.12.2017, 13:03 | #8 | |
Математик
Форумчанин
Регистрация: 27.02.2011
Сообщений: 123
|
Цитата:
|
|
14.12.2017, 13:40 | #9 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
- тут уже придётся в ячейки лезть, что неускоряется.
Если примечаний мало - можно пару раз и слазить, если так под 60% - то уже мало смысла закладываться в словари/массивы... И хорошо что об этом сказали сейчас, а не потом, когда кто-то уже поработал над ненужным кодом.
webmoney: E265281470651 Z422237915069 R418926282008
|
14.12.2017, 13:44 | #10 | |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
roborrr, Вы написали
Цитата:
Сам по себе цикл For-Next очень быстрый. Ваш код можно ускорить, если: 1. правильно объявить переменные - сейчас они все Variant, кроме rowkonec; 2. оптимизировать самый внутренний цикл - исключить повторяющиеся операции. Доступ к элементу массива, особенно двумерного - затратная операция, надо заменить R_data(i, 1) и R_data(i, 2) на простые переменные, присваивать им значения до цикла; 3. использовать Exit For, убрать rowkonec = j (нигде не используется).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ускорить запрос | Kot070 | Microsoft Office Access | 20 | 22.06.2016 08:23 |
помогите ускорить макрос (выборка уникальных по 2-м условиям) | kievlyanin | Microsoft Office Excel | 4 | 11.12.2014 10:48 |
как ускорить | AlexVI | Общие вопросы C/C++ | 10 | 15.07.2014 23:42 |
Ускорить работу БД | SERG1980 | БД в Delphi | 9 | 09.11.2010 23:30 |
Как ускорить макрос в Excel 2003 | polomus | Microsoft Office Excel | 4 | 04.12.2009 16:25 |