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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 11:26   #1
roborrr
Математик
Форумчанин
 
Регистрация: 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. Я хочу ускорить код не за счот улучшения блок схемы кода, а за счот применения более быстрых инструментов вычисления, не только для этого конкретного случая, но и более большими данными.
roborrr вне форума Ответить с цитированием
Старый 14.12.2017, 11:47   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

архив пустой
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.12.2017, 11:49   #3
roborrr
Математик
Форумчанин
 
Регистрация: 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. Я хочу ускорить код не за счот улучшения блок схемы кода, а за счот применения более быстрых инструментов вычисления, не только для этого конкретного случая, но и более большими данными.
Вложения
Тип файла: zip prodaji 1.zip (2.30 Мб, 14 просмотров)
roborrr вне форума Ответить с цитированием
Старый 14.12.2017, 11:49   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Словари и массивы нужны. Файл не смотрел (тем более что говорят что пустой...)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.12.2017, 11:58   #5
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

целый архив не поместилось. пришлось срезать Часть таблицы
Вложения
Тип файла: zip prodaji 1.zip (2.30 Мб, 9 просмотров)
roborrr вне форума Ответить с цитированием
Старый 14.12.2017, 12:07   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Построил сводную таблицу на отдельном листе, использовал функцию
Код:
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("сумма";Лист1!$A$3;"Склад";A2;"Клиент ";B2)
Посчиталось за несколько сек. Можно макросом то же проделать, заменить на значения и удалить лист со сводной.
Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.12.2017, 12:25   #7
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Построил сводную таблицу на отдельном листе, использовал функцию
Код:
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("сумма";Лист1!$A$3;"Склад";A2;"Клиент ";B2)
Посчиталось за несколько сек. Можно макросом то же проделать, заменить на значения и удалить лист со сводной.
Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy
извините, я не всё понял. Вы можете все это сделать в моём файле и показать?
roborrr вне форума Ответить с цитированием
Старый 14.12.2017, 13:03   #8
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Построил сводную таблицу на отдельном листе, использовал функцию
Код:
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("сумма";Лист1!$A$3;"Склад";A2;"Клиент ";B2)
Посчиталось за несколько сек. Можно макросом то же проделать, заменить на значения и удалить лист со сводной.
Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy
спасибо уважаемый казанский за ответ за ответ, но Я писал, Что мне интереснa тема, как ускорить макрос в общем случае, когда цикл for to next замедляет макрос, пример выложил лишь для показа сути проблемы. На самом деле в цикле выполняться и другие вещи, например вставка в определенных ячейках примечание, что сводными таблицами невозможно сделать.
roborrr вне форума Ответить с цитированием
Старый 14.12.2017, 13:40   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от roborrr Посмотреть сообщение
например вставка в определенных ячейках примечание
- тут уже придётся в ячейки лезть, что неускоряется.
Если примечаний мало - можно пару раз и слазить, если так под 60% - то уже мало смысла закладываться в словари/массивы...
И хорошо что об этом сказали сейчас, а не потом, когда кто-то уже поработал над ненужным кодом.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.12.2017, 13:44   #10
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

roborrr, Вы написали
Цитата:
Сообщение от roborrr Посмотреть сообщение
Я хочу ускорить код не за счот улучшения блок схемы кода, а за счот применения более быстрых инструментов вычисления
Я предложил такой инструмент. Вы можете использовать его, а потом вставить примечания и что-то еще уже с готовыми данными, что будет быстрее.
Сам по себе цикл For-Next очень быстрый. Ваш код можно ускорить, если:
1. правильно объявить переменные - сейчас они все Variant, кроме rowkonec;
2. оптимизировать самый внутренний цикл - исключить повторяющиеся операции. Доступ к элементу массива, особенно двумерного - затратная операция, надо заменить R_data(i, 1) и R_data(i, 2) на простые переменные, присваивать им значения до цикла;
3. использовать Exit For, убрать rowkonec = j (нигде не используется).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить запрос 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