Страницы: 1
RSS
Как в диапазоне выделить ячейки определённого цвета?
 
Столкнулся с проблемой, необходим макрос, который в диапазоне выделяет ячейки с заданным цветом. Таблица у меня очень большая, вручную выделять очень долго.  
Может кто подскажет?
 
Sub Ìàêðîñ1()  
Dim s As Range, rr As Range  
For Each rr In ActiveSheet.UsedRange  
If rr.Interior.ColorIndex = 34 Then  
If s Is Nothing Then  
Set s = rr  
Else  
Set s = Union(s, rr)  
End If  
End If  
Next  
s.Select  
End Sub
 
Sub Макрос1()  
Dim s As Range, rr As Range  
For Each rr In ActiveSheet.UsedRange  
If rr.Interior.ColorIndex = 34 Then  
If s Is Nothing Then  
Set s = rr  
Else  
Set s = Union(s, rr)  
End If  
End If  
Next  
s.Select  
End Sub  
без кракозябр :)  
34 - меняете на код нужного цвета
 
Лузер, Вы Бог!  
А как узнать соответствие цветов номерам?
 
...хотел сказать:  
А как узнать коды цветов
 
Макрорекордером записываете назначение ячейке заливки, смотрите какой получился код.  
Или вот с диалоговым окном:  
Sub Макрос1()  
Dim s As Range, rr As Range, myCell As Range  
Set myCell = Application.InputBox( _  
   prompt:="Select a cell", Type:=8)  
Mycol = myCell.Interior.ColorIndex  
For Each rr In ActiveSheet.UsedRange  
If rr.Interior.ColorIndex = Mycol Then  
If s Is Nothing Then  
Set s = rr  
Else  
Set s = Union(s, rr)  
End If  
End If  
Next  
s.Select  
End Sub
 
По этой ссылке ZVI  выкладывал надстройку по выделению ячеек по цвету заливки и по шрифту.  
http://www.planetaexcel.ru/forum.php?thread_id=3350
 
Лузер, ну Вы просто меня спасли от рутины!!! низкий Вам поклон и благодарность!  
Кстати, я в первом сообщении прикрепил файл, сохранённый в формате 2003, а на самом деле, рассчитываю таблицу в 2007ом, она примерно в 3 раза больше той которую я прикрепил. Так вот она до сих пор расчитывается :) пришлось даже тему новую создать: http://www.planetaexcel.ru/forum.php?thread_id=3858
 
Я уже не помню надстройку ZVI, может она и побыстрее работает. У меня на Вашем примере тоже долго считало в 2003-м. Я пока один способ вижу - вместо UsedRange использовать конкретный диапазон, может он меньше окажется по размерам.
 
Проверил по таймеру - одинаково. Плюс у ЗВИ, реализация функции надстройкой, подключено меню и не надо мучаться с макросом в книге.
 
Это ZVI уникальный в этом плане. Мне лень надстройку-то делать, а он и инсталятор к ней и справку.
 
Чтото не удаётся запустить надстройку от ZVI. Всё вроде бы установил, надстройка появилась в меню, но при запуске выдаёт сообщение: "Не удаётся выполнить макрос "....." . Возможно этот макрос отсутствует в текущей книге, либо все макросы отключены."
 
Лузер, а что надо сделать, чтобы вместо UsedRange использовать конкретный диапазон?  
А то на моих документах компьютер просто зависает...
 
---  
Прилагается 3-я версия надстройки выделения ячеек по цвету заливки или шрифта. В отличие от 2-й работает примерно в 100 раз быстрее и позволяет обрабатывать как весь диапазон ячеек листа, так и выделенный диапазон. Выводит также статистику в статусной строке.  
 
Подробности - в CHM-справке.  
 
История:  
Версия 1, код рабочий, но не работало меню:  
http://www.planetaexcel.ru/forum.php?thread_id=3350  
 
Версия 2, полностью рабочая:  
http://www.planetaexcel.ru/forum.php?thread_id=3369  
 
Версия 3, оптимизирована по скорости выполнения:  
http://www.planetaexcel.ru/forum.php?thread_id=3852  
 
---  
ZVI
 
ZVI, в очередной раз не устаю восхищаться!  
Вот только как определять, какая строка кода выполняется медленнее других?  
И еще вопрос почему использована функция StrAdd, а не Sub?
 
ZVI, надстройка - СУПЕР!!! Всё прекрасно работает! Вы настоящий талантище! Искренни Вам благодарен.  
Большое спасибо всем кто откликнулся на мою просьбу!  
Искреннее уважение создателю этого ресурса. Прекрасный форум, а главное люди! отзывчивые и настоящие специалисты своего дела!  
ПС мне необходимо написать модуль подкачки истории котировок, ТЗ есть. Подскажите, готов ли кто нибудь взяться за это дело? готов немного заплатить...
 
выложите тз  и пр условия    
можно в аську:237 144  750
 
{quote}{login=Лузер™}{date=20.05.2008 10:00}{thema=}{post}...  
Вот только как определять, какая строка кода выполняется медленнее других?  
И еще вопрос почему использована функция StrAdd, а не Sub?{/post}{/quote}  
---  
Тормозила Union(Range1,Range2).  
Определялось это достаточно примитивно: была закомментрована вся строка с Union() - помогло.    
А затем раскомментирована, но в строке вместо Union() был вставлен пустой оператор типа i=i, скорость выполнения была хорошей. После чего были приняты меры вызывать Union() пореже.  
Хотя сначала был сделан вариант попроще - вообще без Union(), но он был помедленнее, прожорливее по оперативной памяти, и, главное, не работал на защищенных листах, поэтому от него пришлось отказаться.  
 
При большом количестве обрабатываемых ячеек обычно причиной тормозов кода является многократное обращение из рабочего пространства VBA в рабочее проостранство Excel. Это относится к использованию Application. , Cells(), Range(), .Select, .Hidden  и т.п. Поэтому под подозрение сразу визуально и попала Union(), которая доставала Excel из VBA.  
 
Что касается выбора Function или Sub - то это точно не ноу-хау, а тупая привычка использовать Function, чтобы не отображалась в панели макросов как Sub, хотя есть же и Private. В данном случае, конечно, Sub смотрелось бы  правильнее. В коде надстройки и Space(1024) лучше заменить на Space(256). Также две основные процедуры похожи друг на друга, и можно было бы сделать одну универсальную. Думаю, что многое еще можно было бы подправить и оптимизировать, но работает - и с плеч долой ;)  Было две цели: чтобы работало быстрее+надежно, и сделать быстро.  
---  
ZVI
Страницы: 1
Читают тему
Наверх