Страницы: 1
RSS
Поиск и выделение ячеек цветом
 
Помогите пожалуйста разобраться с макросом, очень нужен мне на работе.
У меня есть макрос:
Код
Sub FindAndSelect()
   Dim strStartAddr As String ' Хранит координаты первого найденного _
                               значения
   Dim rgResult As Range

   ' Поиск первого входжения искомого слова
   Set rgResult = Range("A1:A10000").Find("слон", , xlValues)
   If Not rgResult Is Nothing Then
      ' Сохраним адрес найденной ячейки (чтобы контролировать _
       зацикливание поиска)
      strStartAddr = rgResult.Address
   End If
   Do While Not rgResult Is Nothing
      ' Обработка результата поиска
      rgResult.Interior.Color = RGB(135, 206, 235)

      ' Новый поиск
      Set rgResult = Range("A1:A10000").FindNext(rgResult)
      If rgResult.Address = strStartAddr Then
         ' Поиск завершен
         Exit Do
      End If
   Loop
   MsgBox ("Поиск завершен!")
End Sub


Этот макрос ищет по столбцу А с 1 по 10000 строку, слово "слон" и выделяет ячейку цветом. Я бы хотела его доработать так, чтобы макрос искал не одно слово "слон", а искал еще несколько слов, и закрашивал ячейку разным цветом, к примеру: "слон" закрашивал красным, "белку" закрашивал зеленым, "шмеля" закрашивал серым.

Пожалуйста помогите!
Изменено: OlyaD - 09.05.2013 18:49:39
 
Цитата
OlyaD пишет: ... Я бы хотела его доработать...
Кто/что мешает?.. Не вы писали - к автору. Его не знаете, заказать новое - http://www.planetaexcel.ru/forum/?PAGE_NAME=list&FID=7
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Самое простое - поставить ещё 2 таких блока поиска в этот же макрос (заменить слово и цвет).
Чуть сложнее - сделать ещё 2 копии этого кода (заменить слово и цвет) и сделать ещё один простой код для вызова этих получившихся 3-х.

Ещё вариант - поставить блок поиска в цикл, перебирая массив слов и цветов.

Если найденных/искомых слов будет много - можно собрать словарь слов и цветов, затем за один проход по МАССИВУ слов покрасить ЯЧЕЙКИ на листе.

Довольно простой код:

Код
Sub testpainting()
    Dim a()
    Application.ScreenUpdating = False

    With CreateObject("Scripting.Dictionary")
        .Item("слон") = RGB(135, 206, 235)
        .Item("белка") = RGB(235, 206, 235)
        .Item("шмель") = RGB(35, 206, 235)

        With [a1:a10000]
            .Interior.ColorIndex = xlNone
            a = .Value
        End With

        For i = 1 To UBound(a)
            If .exists(a(i, 1)) Then Cells(i, 1).Interior.Color = .Item(a(i, 1))
        Next
    End With

    Application.ScreenUpdating = True

End Sub

Если нужно ускорить - можно усложнить: собираем номера нужных строк например в коллекцию, затем красим сразу группами (есть несколько способов).
Изменено: Hugo - 02.05.2013 14:21:45
 
Добрый день
Подскажите пожалуйста как записать сюда поиск по части слова, но строго в последовательности
например:
*ло* - находит все слова где в центре есть ло
сл* - исключительно где слова начинаются со "сл"

Заранее спасибо
 
Станислав Асон, почитайте.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
вопрос снят, разобрался)
Страницы: 1
Наверх