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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2010, 12:55   #1
Shkoda
Пользователь
 
Аватар для Shkoda
 
Регистрация: 26.02.2010
Сообщений: 44
По умолчанию Макрос для посчета повторов и уникальных

Здравствуйте.
Есть макрос для подсчета повторных обращений и уникальных обращений. Проблема в том что, данных 50 тыс. строк, просчитывает очень долго. Можно оптимизировать макрос?
Пример прилагаю.
Вложения
Тип файла: zip Оптимизировать.zip (619.0 Кб, 32 просмотров)

Последний раз редактировалось Shkoda; 26.04.2010 в 13:11.
Shkoda вне форума Ответить с цитированием
Старый 26.04.2010, 13:42   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

В первую очередь отключи обновление экрана:
Код:
Application.ScreenUpdating = False
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 26.04.2010, 13:48   #3
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

А ещё постарайся заменять обращения к ячейкам на работу с переменными:
Код:
Do While Cells(u, 25) <> ""
    y = 2
    x = 0
    z = 0
    t1 = Cells(u, 25) 'Используем временную переменную'
    t2 = Cells(u, 29) 'Используем временную переменную'
    Do While Cells(y, 25) <> ""
        If t1 = Cells(y, 25) Then x = x + 1 'В цикле обращений к ячейкам'
        If t2 = Cells(y, 29) Then z = z + 1 'будет меньше'
        y = y + 1
    Loop
    Cells(u, 26) = x 
    Cells(u, 30) = z 
    If x <> 0 Then Cells(u, 27) = 1 / x 'Обращение к Cells(u, 26) заменяем на х'
    If (Cells(u, 28) - z) > 0 Then Cells(u, 31) = Cells(u, 12)
    u = u + 1
Loop
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 26.04.2010, 13:51   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Для начала, не помешает оптимизировать сам файл - там слишком много лишнего форматирования...

(убрал лишнее форматирование - файл в архиве стал весить 24 кБ)

К сожалению, ваш макрос оптимизировать не удастся - его надо переписывать "с нуля"

В принципе, это не очень сложно, но надо понять, что вы хотите получить в итоге.

Прикрепите пример файла из 2 листов:
1 - то, что есть сейчас
2 - то, что должно получиться после нажатия волшебной кнопочки

(ну или на словах объясните, что должен делать макрос)
EducatedFool вне форума Ответить с цитированием
Старый 26.04.2010, 13:52   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я использую две таких процедуры:
Код:
Sub ExlDead() 
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = False
End Sub

Sub ExlLive() 
  Application.EnableEvents = True
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
Главное не забывать после всего "оживить" Excel. За ошибками надо следить, чтобы Ваша процедура не вылетела, а то до выполнения ExlLive не дойдет, и Excel останется замерзшим.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.04.2010, 15:27   #6
Shkoda
Пользователь
 
Аватар для Shkoda
 
Регистрация: 26.02.2010
Сообщений: 44
По умолчанию

Файл во вложении.

Изначально все было прописано формулами, можно посмореть по формулам, краткое описания в примечаниях. Красным цветом отмечены данные которые нужно получить.

За ранее благодарю.
Вложения
Тип файла: zip Копия Sample__26-04-2010__15-48-20.zip (38.7 Кб, 29 просмотров)
Shkoda вне форума Ответить с цитированием
Старый 26.04.2010, 16:21   #7
supergood
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 32
По умолчанию

Всем привет.
Вопрос к IgorGO.
А куда выше описанные процедуры необходимо добавить?
Просьба подсказать поподробней.
supergood вне форума Ответить с цитированием
Старый 26.04.2010, 16:21   #8
supergood
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 32
По умолчанию

Всем привет.
Вопрос к IgorGO.
А куда выше описанные процедуры необходимо добавить?
Просьба подсказать поподробней.
supergood вне форума Ответить с цитированием
Старый 26.04.2010, 19:25   #9
Shkoda
Пользователь
 
Аватар для Shkoda
 
Регистрация: 26.02.2010
Сообщений: 44
По умолчанию

Кто смотрел, просьба ответить, возможно это сделать?
Shkoda вне форума Ответить с цитированием
Старый 27.04.2010, 11:14   #10
Shkoda
Пользователь
 
Аватар для Shkoda
 
Регистрация: 26.02.2010
Сообщений: 44
По умолчанию

Народ помогите, очень нужно. Ато зашиваюсь.
Не могу работать покамисть просчитывает!
Shkoda вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение текста по количеству повторов saggy Помощь студентам 4 12.03.2010 14:23
программа для посчета количества символов в строке revan-8 Общие вопросы C/C++ 13 26.07.2009 16:52
Надо макрос для Excel для перестановки букв dionisprf Microsoft Office Excel 2 10.06.2009 06:04
Ограничение повторов ТРОЯН=) Помощь студентам 5 06.03.2009 09:11
Help! Немогу написать код для посчета и вывода результатов. Руслан БД в Delphi 2 22.12.2006 13:29