Выделение некоторых слов в тексте в ячейке Exel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
kostero
Сообщения: 14
Зарегистрирован: 24 янв 2007, 10:03

30 янв 2007, 15:44

Всем привет.

Кто подскажет. Следующая ситуация. В ячейках в Exel есть некоторый текст и в них есть повторяющие слова (характерные), в каждой ячейке. Хотелось бы каким то образом выделить эти слова полужирным шрифтом и другим цветом.
С помощью замены не получается.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

30 янв 2007, 16:15

имеется в виду, что есть несколько ячеек с одинаковым текстом? Если да, то как определяется "характерность" ячеек?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
kostero
Сообщения: 14
Зарегистрирован: 24 янв 2007, 10:03

30 янв 2007, 16:34

Нет текст в ячейках разный (допустим объявления) но в них есть характерные слова, которые и нужно выделить. Таких ячеек достаточно много и в ручную выделять это достаточно конительно.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

30 янв 2007, 18:00

Тогда, думаю, макрос надо писать на Vba. И будет он делать примерно следующее:
1. В каждой ячейке столбца текст разбивать на слова
2. Подсчитывать, сколько раз встретилось то или иное слово.
3. Если этот счетчик заедет за какую-то величину - это слово можно считать "характерным", стало быть, выделяем его жирным
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Aent
Сообщения: 1108
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

30 янв 2007, 18:20

Смежный вопрос. А можно ли как нибудь изменить выделение части ячейки с помощью функций рабочего листа ?
Пробовал =ТЕКСТ(4;"[Красный]00") & ТЕКСТ(4;"[Синий]00")
Не меняет цвет :(
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

30 янв 2007, 21:58

Kostero, Попробуйте использовать что-то вроде :

Код: Выделить всё

Private Sub ChangeFormating() 'MS Excel 2000, …

Application.ScreenUpdating = False

For Each iWord In Split("текст;формула;константа", ";")
    With ThisWorkbook.Worksheets(1)
         'укажите свою книгу/лист, лист не должен быть защищён (2000), т.к.
         'возможность изменения параметров форматирования нижеуказанным
         'способом появилась только в MS Excel XP
         '(при установке опции разрешить форматирование ячеек)
         Dim iCell As Range
         Set iCell = .UsedRange.Find _
         (What:=iWord, LookIn:=xlValues, LookAt:=xlPart)
         If Not iCell Is Nothing Then
            iAddress$ = iCell.Address
            Do
               If Not iCell.HasFormula Then
                  iPosition% = InStr(iCell.Value, iWord)
                  'если существует вероятность, что одно слово
                  'может встречаться в ячейке более одного раза
                  'то это необходимо учесть
                  With iCell.Characters _
                  (Start:=iPosition%, Length:=Len(iWord))
                       .Font.Bold = True
                       .Font.Color = vbRed
                  End With
               End If
               Set iCell = .UsedRange.FindNext(After:=iCell)
            Loop While Not iCell Is Nothing And iCell.Address <> iAddress$
         End If
    End With
Next

Application.ScreenUpdating = True

End Sub
Кстати, если заменить Split("текст;формула;константа", ";") на Array("текст", "формула", "константа") то вышеопубликованный вариант можно использовать в более ранних версиях. Однако, применение функции Split позволяет задавать список нужных слов в виде строки.

Aent, Стандартные функции рабочего листа не меняют параметры форматирования.
kostero
Сообщения: 14
Зарегистрирован: 24 янв 2007, 10:03

31 янв 2007, 09:06

pashulka. Спасибо програмка работает. Я сейчас погоняю ее немного по своим формативным запросам. Пока все хорошо.
kostero
Сообщения: 14
Зарегистрирован: 24 янв 2007, 10:03

31 янв 2007, 10:27

pashulka.
Kostero беспокоит в принципе программка рабочая, вполне удовлетворяет. Есть маленький формальный недос-таток при выполнении этого макроса появляется окошко ошибка 91 (object variable or with block variable not set). Не-сколько раз ее игнорируем через Dedug и она работает. Как можно от этого избавиться. И еще вопрос. Можно ли вы-делить сразу несколько слов в тексе (в ячейке) находящиеся не рядышком. (Если это возможно)
Пример
Мерседес-Бенц-S500, 2000 г. в., двиг. 5.0, пробег 176 тыс. км (S500 и пробег)

И еще (я не программист только постепенно начинаю этим интересоваться), что нужно дописать перед этим макросом (public и другое, что то), что бы она была всегда занесена в макросы.
Ответить