|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе |
|
|
2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе
|
Старожил Сообщения: 329 |
Всем доброго вечера.
Есть интересная задача. Нужно выделить часть текста в ячейке которая запрашивается у пользователя. Как себе это вижу я: 1) спрашиваем шаблон и цвет у юзера 2) присваиваем переменной и считаем длину (дальше пригодится) 3)цикл поиска на присутствие в ячейках шаблона(не в пустых ячейках) 4)считаем какой по счету символ начинается шаблон в найденой ячейке 5)дальше выполняем окрашивание в цвет(красный) (это есть в макрорекодере) |
|
Отправлено: 15:25, 17-05-2016 |
Динохромный Сообщения: 703
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
|
|
------- Отправлено: 15:50, 17-05-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, часть текста поддерживается?
он красит всю ячейку, а надо только то что ищется. Только шаблон.а он может где угодно находиться в тексте ячейки. |
------- Последний раз редактировалось blackeangel, 17-05-2016 в 16:29. Отправлено: 16:23, 17-05-2016 | #3 |
Динохромный Сообщения: 703
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Приложите файл, который будет содержать примеры текста, соответствующие шаблоны поиска и желаемый результат. |
|
------- Отправлено: 17:05, 17-05-2016 | #4 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, пример
|
|
------- Последний раз редактировалось blackeangel, 03-04-2017 в 22:53. Отправлено: 22:10, 17-05-2016 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, спасибо, отлично работает. Только вопрос, а на больших объемах данных долго думать будет?
Ну и не хватает Цитата blackeangel:
|
|
------- Отправлено: 22:14, 18-05-2016 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Цитата blackeangel:
|
|||
Отправлено: 05:43, 19-05-2016 | #8 |
Старожил Сообщения: 329
|
Профиль | Отправить 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 |
Динохромный Сообщения: 703
|
Профиль | Отправить PM | Цитировать Цитата 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.при вводе цвета текста нужно вставить значение по умолчанию, чтобы сократить количество ненужных действий (например красный): код
Соответственно, код будет выглядеть следующим образом: код
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 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|