Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение значений в ячейках и выделение их - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение значений в ячейках и выделение их (Макросы/Sub)
Сравнение значений в ячейках и выделение их
rever27 Дата: Воскресенье, 28.06.2015, 22:36 | Сообщение № 21
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
KSV, спасибо за разъяснения.
Изучил материал, сделал все по подобию вашего кода.
Даже нашел у вас небольшую ошибку )
Для поиска конечной строки вы указывали r = r - 40, если бы Текущая Активная была бы к примеру 1500 строкой, то в массив попало бы примерно еще столько же пустых строк.
For i = 1 To Selection.Rows.Count же выделяет полностью нашу область (проверял через .select)

Скорость, конечно, стала немного быстрее, но все равно время обработки 2000 строк занимает примерно 35 секунд. Добавил .Sort .Columns(16) перед циклом - выиграл пару секунд.
Весь файл приложить не могу, ограничение в 100кб, только 242 строчки влезло.

Можно что то еще из него "выжать"? ))
К сообщению приложен файл: 1121.xlsm (98.3 Kb)
 
Ответить
СообщениеKSV, спасибо за разъяснения.
Изучил материал, сделал все по подобию вашего кода.
Даже нашел у вас небольшую ошибку )
Для поиска конечной строки вы указывали r = r - 40, если бы Текущая Активная была бы к примеру 1500 строкой, то в массив попало бы примерно еще столько же пустых строк.
For i = 1 To Selection.Rows.Count же выделяет полностью нашу область (проверял через .select)

Скорость, конечно, стала немного быстрее, но все равно время обработки 2000 строк занимает примерно 35 секунд. Добавил .Sort .Columns(16) перед циклом - выиграл пару секунд.
Весь файл приложить не могу, ограничение в 100кб, только 242 строчки влезло.

Можно что то еще из него "выжать"? ))

Автор - rever27
Дата добавления - 28.06.2015 в 22:36
KSV Дата: Понедельник, 29.06.2015, 04:45 | Сообщение № 22
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
вы указывали r = r - 40, если бы Текущая Активная была бы к примеру 1500 строкой, то в массив попало бы примерно еще столько же пустых строк

А что заставило вас сделать активной ячейку в строке 1500, если учесть то, что в файле примере из сообщения 16, на которое я ссылался в предыдущем посте, последней заполненной строкой является строка 84? :)
Но, даже если это и произойдет, то до строки r = r - 40 дело даже не дойдет, потому что двумя строками выше ошибку вызовет метод .Resize(r - n + 1, 9), т.к. номер переданной ему строки будет задан отрицательным числом (84 - 1500 + 1 = -1415).
For i = 1 To Selection.Rows.Count же выделяет полностью нашу область (проверял через .select)

Если выделена одна ячейка, то Selection.Rows.Count вернет 1.
(от 2000 строк более 2х минут)

Скорость, конечно, стала немного быстрее, но все равно время обработки 2000 строк занимает примерно 35 секунд

В 4 раза быстрее - это немного? :)
Можно что то еще из него "выжать"?

Конечно, можно. Нет предела совершенству!... :) (посмотрю попозже)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
вы указывали r = r - 40, если бы Текущая Активная была бы к примеру 1500 строкой, то в массив попало бы примерно еще столько же пустых строк

А что заставило вас сделать активной ячейку в строке 1500, если учесть то, что в файле примере из сообщения 16, на которое я ссылался в предыдущем посте, последней заполненной строкой является строка 84? :)
Но, даже если это и произойдет, то до строки r = r - 40 дело даже не дойдет, потому что двумя строками выше ошибку вызовет метод .Resize(r - n + 1, 9), т.к. номер переданной ему строки будет задан отрицательным числом (84 - 1500 + 1 = -1415).
For i = 1 To Selection.Rows.Count же выделяет полностью нашу область (проверял через .select)

Если выделена одна ячейка, то Selection.Rows.Count вернет 1.
(от 2000 строк более 2х минут)

Скорость, конечно, стала немного быстрее, но все равно время обработки 2000 строк занимает примерно 35 секунд

В 4 раза быстрее - это немного? :)
Можно что то еще из него "выжать"?

Конечно, можно. Нет предела совершенству!... :) (посмотрю попозже)

Автор - KSV
Дата добавления - 29.06.2015 в 04:45
rever27 Дата: Понедельник, 29.06.2015, 09:18 | Сообщение № 23
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
А что заставило вас сделать активной ячейку в строке 1500
Так я говорил, что таблица постоянно меняется, иногда 10 строк, иногда под 2000. В один прекрасный день их будет 10000, кто знает )

Если выделена одна ячейка, то Selection.Rows.Count вернет 1
Понимаю, но на работоспособность это не влияет, да и запускать код с диапазоном в 1 ячейку никто не будет ^_^

В 4 раза быстрее - это немного?
На самом деле я не сравнивал изначальную скорость в одной таблице со всеми вариантами кода, но согласитесь, даже 35 секунд обработки вызовут грусть :D

Конечно, можно. Нет предела совершенству!... (посмотрю попозже)
Очень буду ждать, т.к. это последний фильтр, который мне осталось закончить, все остальные фильтруют/удаляют за 1-2 секунды (конечно, они и попроще)

Сейчас проверил код, .Sort .Columns(16) работает не правильно, нужно отключить, и если
[vba]
Код

a = Split(v(i, 8), "=")(1): b = Split(v(i, 9), "=")(1): c = Split(v(i, 10), "=")(1): _
d = Split(v(i, 11), "=")(1): e = Split(v(i, 12), "=")(1): _
[/vba]перенести в цикл
[vba]
Код
For n = i + 1 To .Rows.Count
[/vba]То немного быстрее будет работать


Сообщение отредактировал rever27 - Понедельник, 29.06.2015, 10:02
 
Ответить
Сообщение
А что заставило вас сделать активной ячейку в строке 1500
Так я говорил, что таблица постоянно меняется, иногда 10 строк, иногда под 2000. В один прекрасный день их будет 10000, кто знает )

Если выделена одна ячейка, то Selection.Rows.Count вернет 1
Понимаю, но на работоспособность это не влияет, да и запускать код с диапазоном в 1 ячейку никто не будет ^_^

В 4 раза быстрее - это немного?
На самом деле я не сравнивал изначальную скорость в одной таблице со всеми вариантами кода, но согласитесь, даже 35 секунд обработки вызовут грусть :D

Конечно, можно. Нет предела совершенству!... (посмотрю попозже)
Очень буду ждать, т.к. это последний фильтр, который мне осталось закончить, все остальные фильтруют/удаляют за 1-2 секунды (конечно, они и попроще)

Сейчас проверил код, .Sort .Columns(16) работает не правильно, нужно отключить, и если
[vba]
Код

a = Split(v(i, 8), "=")(1): b = Split(v(i, 9), "=")(1): c = Split(v(i, 10), "=")(1): _
d = Split(v(i, 11), "=")(1): e = Split(v(i, 12), "=")(1): _
[/vba]перенести в цикл
[vba]
Код
For n = i + 1 To .Rows.Count
[/vba]То немного быстрее будет работать

Автор - rever27
Дата добавления - 29.06.2015 в 09:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение значений в ячейках и выделение их (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!