Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе

Ответить
Настройки темы
2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: blackeangel
Дата: 20-05-2016
Всем доброго вечера.
Есть интересная задача. Нужно выделить часть текста в ячейке которая запрашивается у пользователя.
Как себе это вижу я:
1) спрашиваем шаблон и цвет у юзера
2) присваиваем переменной и считаем длину (дальше пригодится)
3)цикл поиска на присутствие в ячейках шаблона(не в пустых ячейках)
4)считаем какой по счету символ начинается шаблон в найденой ячейке
5)дальше выполняем окрашивание в цвет(красный) (это есть в макрорекодере)

Отправлено: 15:25, 17-05-2016

 

Динохромный


Contributor


Сообщения: 703
Благодарности: 320

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Как себе это вижу я: »
blackeangel, почему не подходит стандартная функция "поиск и замена", она позволяет выполнять поиск по шаблону и заменять формат ячеек - хотите заливку, хотите цвет текста.

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]


Отправлено: 15:50, 17-05-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


a_axe, часть текста поддерживается?

он красит всю ячейку, а надо только то что ищется. Только шаблон.а он может где угодно находиться в тексте ячейки.

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Последний раз редактировалось blackeangel, 17-05-2016 в 16:29.


Отправлено: 16:23, 17-05-2016 | #3


Динохромный


Contributor


Сообщения: 703
Благодарности: 320

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
часть текста поддерживается »
нет, позволяет заменить форматирование всей ячейки.
Приложите файл, который будет содержать примеры текста, соответствующие шаблоны поиска и желаемый результат.

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]


Отправлено: 17:05, 17-05-2016 | #4


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


a_axe, пример

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Последний раз редактировалось blackeangel, 03-04-2017 в 22:53.


Отправлено: 22:10, 17-05-2016 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


blackeangel, интересные Вы там шаблоны ищете .

Примерно так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Sub Sample()
    Dim strFindWhat As String
    Dim strFirstFoundAddress As String
    
    Dim objRange As Range
    
    Dim intFoundPosition As Integer
    
    
    strFindWhat = "ол"
    
    With ThisWorkbook.Worksheets.Item("Данные").UsedRange
        Set objRange = .Find( _
            What:=strFindWhat, _
            LookIn:=xlFormulas, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False _
        )
        
        If Not objRange Is Nothing Then
            strFirstFoundAddress = objRange.Address
            
            Do
                intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
                
                Do While intFoundPosition > 0
                    objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = RGB(255, 0, 0)
                    intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
                Loop
                
                Set objRange = .FindNext(After:=objRange)
            Loop Until objRange.Address = strFirstFoundAddress
        End If
    End With
End Sub

Естественно, вместо UsedRange Вы используете потребный Вам диапазон.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:41, 18-05-2016 | #6


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska, спасибо, отлично работает. Только вопрос, а на больших объемах данных долго думать будет?
Ну и не хватает
Цитата blackeangel:
1) спрашиваем шаблон у юзера »

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 22:14, 18-05-2016 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Только вопрос, а на больших объемах данных долго думать будет? »
Я не знаю количественное выражение «больших объёмов данных». Я не знаю конкретное количественное выражение понятия «долго». Посему не могу дать ответа на данный вопрос.

Цитата blackeangel:
Ну и не хватает
Цитата:
1) спрашиваем шаблон у юзера
»
Ну, добавьте InputBox вместо присвоения.

Отправлено: 05:43, 19-05-2016 | #8


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska, спасибо, так и сделал. Еще сделал запрос цвета для выделения.

Код: Выделить весь код
Sub colorr()
    Dim strFindWhat As String
    Dim strFirstFoundAddress As String
    Dim objRange As Range
    Dim intFoundPosition As Integer
    strFindWhat = InputBox("Введите что подкрасить")
    sFontColorAsk = InputBox("Введите один из цветов: " _
    & Chr(13) & "черный, красный, зеленый, желтый," _
    & Chr(13) & "синий, пурпурный, циан, белый")
    If sFontColorAsk = "черный" Or sFontColorAsk = "Черный" Then sFontColor = vbBlack
    If sFontColorAsk = "красный" Or sFontColorAsk = "Красный" Then sFontColor = vbRed
    If sFontColorAsk = "зеленый" Or sFontColorAsk = "Зеленый" Then sFontColor = vbGreen
    If sFontColorAsk = "желтый" Or sFontColorAsk = "Желтый" Then sFontColor = vbYellow
    If sFontColorAsk = "синий" Or sFontColorAsk = "Синий" Then sFontColor = vbBlue
    If sFontColorAsk = "пурпурный" Or sFontColorAsk = "Пурпурный" Then sFontColor = vbMagenta
    If sFontColorAsk = "циан" Or sFontColorAsk = "Циан" Then sFontColor = vbCyan
    If sFontColorAsk = "белый" Or sFontColorAsk = "Белый" Then sFontColor = vbWhite
    With ActiveSheet.UsedRange
        Set objRange = .Find( _
            What:=strFindWhat, _
            LookIn:=xlFormulas, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False _
        )
        If Not objRange Is Nothing Then
            strFirstFoundAddress = objRange.Address
            Do
                intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
                Do While intFoundPosition > 0
                    objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = sFontColor
                    intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
                Loop
                Set objRange = .FindNext(After:=objRange)
            Loop Until objRange.Address = strFirstFoundAddress
        End If
    End With
End Sub
Если есть вариант проще, то это интересно.

Отправлено: 15:22, 19-05-2016 | #9


Динохромный


Contributor


Сообщения: 703
Благодарности: 320

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Если есть вариант проще, то это интересно. »
blackeangel, к программной реализации вопросов особенных нет, а вот взаимодействие с программой на мой взгляд можно построить следующим образом (я излагаю свое представление об удобстве, разумеется у вас оно может полностью не совпадать)

1. каждый раз вводить полное наименование цвета на мой взгляд неудобно. По хорошему можно сделать форму (одну - с текстовым окном и опциями выбора цвета), в которую вы сразу будете забивать свой поисковый шаблон и при необходимости - выбирать мышкой цвет.
При вводе через input я бы ограничился вводом первой буквы: не "красный", а просто "к". Кроме того, при наличии орфографической неточности (например "краный", или "Чёрный" вместо "Черный") соответствия найдено не будет, вполне можно принудительно присвоить в этом случае цвет (например черный) и предупредить об этом пользователя. Реализовать все вышеперечисленное можно через select case:
код Select case
Код: Выделить весь код
Select Case LCase(sFontColorAsk)
        
        Case "к"
            sFontColor = vbRed
        Case "з"
            sFontColor = vbGreen
        Case "ж"
            sFontColor = vbYellow
        Case "с"
            sFontColor = vbBlue
        Case "п"
            sFontColor = vbMagenta
        Case "ц"
            sFontColor = vbCyan
        Case "б"
            sFontColor = vbWhite
        Case "ч"
            sFontColor = vbBlack
        Case Else
            sFontColor = vbBlack
            MsgBox "Цвет не распознан, применен черный"
    End Select

2. Введенный цвет следует не проверять в обоих регистрах (If sFontColorAsk = "черный" Or sFontColorAsk = "Черный"), а перевести в заданный(например нижний) регистр: LCase(sFontColorAsk). Это ускорит работу кода.
3.при вводе цвета текста нужно вставить значение по умолчанию, чтобы сократить количество ненужных действий (например красный):
код
Код: Выделить весь код
sFontColorAsk = InputBox("Введите один из цветов: " _
    & Chr(13) & "черный (ч), красный (к),зеленый (з)," _
    & Chr(13) & "желтый (ж), синий (с), пурпурный (п), циан (ц), белый (б)", , "к")


Соответственно, код будет выглядеть следующим образом:
код
Код: Выделить весь код
Sub colorr2()
    Dim strFindWhat As String
    Dim strFirstFoundAddress As String
    Dim objRange As Range
    Dim intFoundPosition As Integer
    strFindWhat = InputBox("Введите что подкрасить")
    sFontColorAsk = InputBox("Введите один из цветов: " _
    & Chr(13) & "черный (ч), красный (к),зеленый (з)," _
    & Chr(13) & "желтый (ж), синий (с), пурпурный (п), циан (ц), белый (б)", , "к")
    
    Select Case LCase(sFontColorAsk)
        
        Case "к"
            sFontColor = vbRed
        Case "з"
            sFontColor = vbGreen
        Case "ж"
            sFontColor = vbYellow
        Case "с"
            sFontColor = vbBlue
        Case "п"
            sFontColor = vbMagenta
        Case "ц"
            sFontColor = vbCyan
        Case "б"
            sFontColor = vbWhite
        Case "ч"
            sFontColor = vbBlack
        Case Else
            sFontColor = vbBlack
            MsgBox "Цвет не распознан, применен черный"
    End Select
    With ActiveSheet.UsedRange
        Set objRange = .Find( _
            What:=strFindWhat, _
            LookIn:=xlFormulas, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False _
        )
        If Not objRange Is Nothing Then
            strFirstFoundAddress = objRange.Address
            Do
                intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
                Do While intFoundPosition > 0
                    objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = sFontColor
                    intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
                Loop
                Set objRange = .FindNext(After:=objRange)
            Loop Until objRange.Address = strFirstFoundAddress
        End If
    End With
End Sub

Последний раз редактировалось a_axe, 20-05-2016 в 09:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:36, 20-05-2016 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - Поиск по листу и заполнение данными таблицы на другом листе eus_deus Microsoft Office (Word, Excel, Outlook и т.д.) 1 25-03-2016 16:16
CMD/BAT - скрипт на создание теста PerfMon по шаблону в ХР saintman Скриптовые языки администрирования Windows 0 26-02-2014 16:28
VBS/WSH/JS - [решено] замена текста в файле по шаблону dembel_zone Скриптовые языки администрирования Windows 12 29-12-2013 19:21
2003/XP/2000 - [решено] MS Word: добавление цвета в меню выделение текста цветом AlexM Microsoft Office (Word, Excel, Outlook и т.д.) 4 05-03-2010 06:13
[решено] Подчеркивание текста другим цветом Kul86 Вебмастеру 2 27-05-2009 00:33




 
Переход