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

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

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

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

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

Сообщение kostero » Вт янв 30, 2007 3:44 pm

Всем привет.

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

Хыиуду
Сообщения: 2388
Зарегистрирован: Вс мар 06, 2005 9:03 pm
Откуда: Москва
Контактная информация:

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

Сообщение Хыиуду » Вт янв 30, 2007 4:15 pm

имеется в виду, что есть несколько ячеек с одинаковым текстом? Если да, то как определяется "характерность" ячеек?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.

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

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

Сообщение kostero » Вт янв 30, 2007 4:34 pm

Нет текст в ячейках разный (допустим объявления) но в них есть характерные слова, которые и нужно выделить. Таких ячеек достаточно много и в ручную выделять это достаточно конительно.

Хыиуду
Сообщения: 2388
Зарегистрирован: Вс мар 06, 2005 9:03 pm
Откуда: Москва
Контактная информация:

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

Сообщение Хыиуду » Вт янв 30, 2007 6:00 pm

Тогда, думаю, макрос надо писать на Vba. И будет он делать примерно следующее:
1. В каждой ячейке столбца текст разбивать на слова
2. Подсчитывать, сколько раз встретилось то или иное слово.
3. Если этот счетчик заедет за какую-то величину - это слово можно считать "характерным", стало быть, выделяем его жирным
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.

Аватара пользователя
Aent
Сообщения: 1108
Зарегистрирован: Вс окт 01, 2006 1:52 pm
Откуда: Saratov,Russia
Контактная информация:

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

Сообщение Aent » Вт янв 30, 2007 6:20 pm

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

pashulka
Сообщения: 831
Зарегистрирован: Ср ноя 24, 2004 3:46 am
Контактная информация:

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

Сообщение pashulka » Вт янв 30, 2007 9:58 pm

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 am

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

Сообщение kostero » Ср янв 31, 2007 9:06 am

pashulka. Спасибо програмка работает. Я сейчас погоняю ее немного по своим формативным запросам. Пока все хорошо.

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

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

Сообщение kostero » Ср янв 31, 2007 10:27 am

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

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

Ответить