@Jack BeNimble
thanks for the code, used it successfully in 10 mins to highlight all the numbers in a cell. I reorganized it a tad, searching all search terms within a row and cell first and allowed for multiple columns. I found one error, your highlight text didn’t like repeats 55, 444, only highlighted the odd repeats in a sequence. Modified one line in Highlight Function
newOffset = offSet + foundPos + Len(searchString) - 1 //added the - 1.
here is my modified code.
Sub NumberColors()
Dim searchTerms As Variant
searchTerms = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".")
Dim searchString As String
Dim targetString As String
Dim offSet As Integer
Dim colsToSearch As Variant
Dim arrayPos, colIndex, colNum As Integer
Dim rowNum As Integer
colsToSearch = Array(4, 44, 45)
For colIndex = LBound(colsToSearch) To UBound(colsToSearch)
colNum = colsToSearch(colIndex)
For rowNum = 5 To 3000
For arrayPos = LBound(searchTerms) To UBound(searchTerms)
searchString = Trim(searchTerms(arrayPos))
offSet = 1
Dim x As Integer
targetString = Cells(rowNum, colNum).Value
x = HilightString(offSet, searchString, rowNum, colNum)
Next arrayPos
Next rowNum
Next colIndex
End Sub
Function HilightString(offSet As Integer, searchString As String, rowNum As Integer, ingredCol As Integer) As Integer
Dim x As Integer
Dim newOffset As Integer
Dim targetString As String
' offet starts at 1
targetString = Mid(Cells(rowNum, ingredCol), offSet)
foundPos = InStr(LCase(targetString), searchString)
If foundPos > 0 Then
' the found position will cause a highlight where it was found in the cell starting at the offset - 1
Cells(rowNum, ingredCol).Characters(offSet + foundPos - 1, Len(searchString)).Font.Color = vbBlue
' increment the offset to found position + 1 + the length of the search string
newOffset = offSet + foundPos + Len(searchString) - 1
x = HilightString(newOffset, searchString, rowNum, ingredCol)
Else
' if it's not found, come back out of the recursive call stack
Exit Function
End If
End Function
Thanks Jack BeNimbleand datatoo
в книге на листе есть ComboBox_Art и TextBox_pcs
В ComboBox_Art пользователь выбирает/вводит артикул
В TextBox_pcs вводи значение товара
Переход с поля на поле осуществляется по Enter
после того как пользователь выбрал товар и количество
по интеру обробатываеться процедура
Private Sub TextBox_pcs_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
If Range(«A19»).Value > 0 And TextBox_pcs.Text > 0 Then
Cells(Range(«A18»).Value, 7).Value = Cells(Range(«A18»).Value, 7).Value + TextBox_pcs.Text ‘записываем в базу.
CheckBox_hide_Click
End If
ComboBox_Art.Activate
End If
End Sub
Записывается значение в базу и опять активируется ComboBox_Art
Нужно что бы текст в ComboBox_Art выделился что бы если пользователь начнет вводить новый артикул то не нужно было удалять старый. (выделеный текст при вводе нового стираться)
это все нужно что бы оператор смог быстро очень быстро набивать позиции.
Выделение заданного фрагмента текста в ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
1 |
|
Какой командой в макросе обработать выделенный в ячейке кусок текста?24.10.2013, 14:54. Показов 8065. Ответов 38
Возникла необходимость обработать макросом только часть содержимого ячейки. А какая комманда используется для передачи этого куска текста макросу нигде не обнаружено. На форуме идет речь о ячейках целиком или о диапазонах ячеек, а выделенный текст передать макросу не получается. Может кто знает такую команду в VBA? Такая команда: .Characters(Start:=x, Length:=y). НЕ подходит, нужно обработать любой ВЫДЕЛЕННЫЙ мышью кусок ячейки, заранее неизвестный. Т.е. так как мы делаем это с помощью панели инструментов, выделяем мышкой часть текста ячейки, затем нажимаем ярлык на панели и текст обрабатывается. В стандарной литературе по VBA почему-то таких возможностей не встретилось. Если кто знает как это сделать, пожалуйста озовитесь.
0 |
Surrogate Ушел с CyberForum совсем! 873 / 182 / 25 Регистрация: 04.05.2011 Сообщений: 1,020 Записей в блоге: 110 |
||||
24.10.2013, 15:19 |
2 |
|||
Решениемне удалось выделить красным шрифтом символы с 2-го по 4 в ячейке содержащей 5 символов
Добавлено через 31 секунду
1 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
24.10.2013, 22:32 |
3 |
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
24.10.2013, 23:37 |
4 |
Боюсь, что ничего не получится: Макрос не будет работать пока ячейка активна
0 |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
25.10.2013, 00:58 [ТС] |
5 |
Для Igor_Tr — Нет это не фантастика. Вы же можете в ячейке обрабатывать текст используя мышку и иконки в панели управления, тоже самое нужно для макроса. Для Surrogate — Я писал, что команда с заранее известными символами не подходит. Для Alex77755 — Я это понял, но почему нельзя, и как это обойти, если конечно это возможно?
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
25.10.2013, 01:22 |
6 |
Даже если сделаешь паузу в макросе и выделишь часть текста в ячеке, то макос дальше по F8 выполняться не будет, а тихо прекратится без всяких ошибок
0 |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
25.10.2013, 02:09 [ТС] |
7 |
Спасибо, Alex77755.
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
25.10.2013, 02:47 |
8 |
Где-то попадалось внешней программой типа Ctr+C, а потом забирать из буфера Добавлено через 1 минуту
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
25.10.2013, 08:49 |
9 |
это не из области фантастики! To markiza-inc. Вы не обратили внимание. Там стоит восклицательный для этой части фразы. Я имел ввиду, что научить машину «думать» как Вы — это не из области фантастики.
0 |
Евгений С самый вменяемый тролль 564 / 52 / 8 Регистрация: 19.09.2012 Сообщений: 192 |
||||||||||||
25.10.2013, 10:34 |
10 |
|||||||||||
markiza-inc,
Такая команда: .Characters(Start:=x, Length:=y). Что, если на форму кинуть текстбоксы, в них вводить координаты нужного «куска», приравнивать переменные, а затем запускать макрос кнопкой «Go!!!» ? Добавлено через 19 минут
а так же
могут помочь обойти и текстбоксы Добавлено через 6 минут
?
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
25.10.2013, 11:31 |
11 |
Я вот немного не понимаю — а КАК нужно обработать этот кусок? Выделить жирным, поменять шрифт, цвет? Так вместо кнопки макроса жмите кнопку жирности, какая разница?
0 |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
25.10.2013, 13:10 [ТС] |
12 |
Для Hugo121: С куском текста нужно сделать то, чего нет в стандарных функциях. Причем не 10-20 кнопок нажимать, а всего одну, в возможности которой заложено сразу много действий. А то, что если ячейка выбрана — не работают макросы, это и опытным путем было выяснено. Вопрос в том и заключался, как сделать так, чтобы макрос выполнялся, какими-нибудь обходными путями. Ведь стандартные функции, о которых Вы писали (шрифт, жирность и т.д.) — выполняются с куском текста. Нужны такие же возможности с макросами. Возможно Вам трудно понять потому что Вы имеете возможность обрабатывать текст часами, а нам нужно быстро, нажатием всего одной кнопки. Причем в разных ячейках разные куски. Кстати. Такой вопрос в Инете я уже встречал и не единожды, но ответа на него там нет.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
25.10.2013, 13:31 |
13 |
И где ответ на «КАК нужно обработать этот кусок?» И чтоб я обрабатывал текст часами… Да не жисть!
0 |
Заблокирован |
||||
25.10.2013, 13:45 |
14 |
|||
Возможно, я чего-то недопонял?
0 |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
25.10.2013, 16:33 [ТС] |
15 |
На событие действительно можно, а на макрос не идет. Хотя макросы на панели при выделении текста в ячейке остаются активными, но обработки нет.
0 |
Заблокирован |
||||
25.10.2013, 18:25 |
16 |
|||
Попробуйте ещё раз: Этот код вставьте в модуль ЭтаКнига
Выделите часть текста в ячейке. Задайте формат Ж (B(old)) выделению. Нажмите Enter. Не по теме: Я понимаю, что вам хотелось запустить обработку, находясь в самой ячейке,
0 |
призрак 3261 / 889 / 119 Регистрация: 11.05.2012 Сообщений: 1,702 Записей в блоге: 2 |
|
25.10.2013, 19:45 |
17 |
не осознал смысла этой прихоти аналогично, шеф так как не осознал и не проникся, могу предложить способ . пс. да-да, я знаю, что это изврат. поэтому без файла и кода.
1 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
25.10.2013, 20:50 |
18 |
0 |
905 / 232 / 100 Регистрация: 21.10.2012 Сообщений: 567 |
|
26.10.2013, 13:09 [ТС] |
19 |
К посту №16 для Апострофф:
К сожалению в Excel в отличии от Word ярлычки надстрочного и подстрочного шрифта отсутствуют. Но для простых величин не проблема, был написан макрос переводящий в выделенных ячейках последний символ в надстрочный шрифт. НО …
Причем это простая запись, с простой формулой. А ведь Excel — это редактор и вычислитель формул. Так что вопрос в тему. Но потом появились другие потребности в функциях (причем более сложных), схожие с данными условиями. Вот отсюда и возник мой вопрос. Как уже писал, в интернете этот опрос возникал и до меня (остался без ответа), только до этого форума он не доходил пока.
0 |
призрак 3261 / 889 / 119 Регистрация: 11.05.2012 Сообщений: 1,702 Записей в блоге: 2 |
|
26.10.2013, 13:42 |
20 |
А ведь Excel — это редактор … формул. вот это новость! а Excel предназначен совсем для другого.
1 |
Свойства SelStart, SelLength, SelText элемента управления TextBox. Указание точки вставки, выделение части строки, вставка текста вместо выделенного.
SelStart – это свойство элемента управления TextBox, которое задает или возвращает начальную точку выделения подстроки или точку вставки, если текст в поле не выделен.
Свойство TextBox.SelStart может принимать значения от 0 до длины строки, тип данных – Integer. Пример расположения точек вставки в строке «На дереве»: 0Н1а2 3д4е5р6е7в8е9
.
Присвоение свойству SelStart нового значения отменяет ранее сделанное выделение, задает свойству SelLength значение 0 и помещает точку вставки в указанное место.
При присвоении свойству TextBox.SelStart значения, превышающего длину строки, VBA Excel автоматически уменьшает его до длины строки. Присвоение свойству SelStart значения меньше нуля вызывает ошибку.
Свойство TextBox.SelLength
SelLength – это свойство элемента управления TextBox, которое задает или возвращает количество выделяемых (выделенных) символов в строке, содержащейся в текстовом поле, начиная с начальной позиции, определяемой свойством TextBox.SelStart.
Свойство TextBox.SelLength может принимать значения от 0 до длины строки, тип данных – Integer.
При присвоении свойству SelLength значения, превышающего длину строки от точки вставки до ее конца, VBA Excel автоматически уменьшает это значение до длины строки от точки вставки до ее окончания.
Если значение свойства TextBox.SelLength равно нулю, значит выделенного текста нет. Присвоение этому свойству значения меньше нуля вызывает ошибку.
Свойство TextBox.SelText
SelText – это свойство элемента управления TextBox, которое возвращает выделенную часть строки, содержащуюся в текстовом поле, а также способное принимать новое значение, заменяющее предыдущее выделение.
Если в текстовом поле нет выделенных символов, свойство SelText возвращает пустую строку.
При присвоении свойству SelText, содержащему выделение, новой строки с помощью оператора присваивания (TextBox.SelText = «Новая строка»):
- ранее выделенный текст заменяется новым;
- свойству SelText присваивается пустая строка;
- выделение снимается (свойству SelLength присваивается значение 0);
- курсор устанавливается в конце вставленной подстроки.
Примеры кода VBA Excel
Свойства SelStart, SelLength, SelText доступны в VBA Excel независимо от того, установлен ли на элемент управления TextBox фокус. Но передача фокуса текстовому полю нужна для того, чтобы видеть выделенный участок текста или курсор в точке вставки.
Для реализации первых двух примеров достаточно разместить на пользовательской форме только текстовое поле TextBox1. Фокус в коде VBA Excel передавать не нужно, так как это единственный элемент управления на форме и фокус всегда на нем.
Пример 1
Установка курсора между четвертым и пятым символом строки в текстовом поле:
Private Sub UserForm_Initialize() With TextBox1 .Text = «Каракатица» .SelStart = 4 End With End Sub |
Пример 2
Выделение подстроки из 5 символов, начиная с 4 знака:
Private Sub UserForm_Initialize() With TextBox1 .Text = «Шумел камыш» .SelStart = 3 .SelLength = 5 End With End Sub |
Пример 3
Выделение подстроки, ее замена с помощью присвоения свойству TextBox.SelText нового значения, чтение этого свойства до присвоения и после.
Для реализации третьего примера добавим на пользовательскую форму кнопку CommandButton1. Для просмотра положения курсора после замены подстроки передадим фокус текстовому полю, так как после клика он будет на кнопке.
Private Sub CommandButton1_Click() With TextBox1 .Text = «Веселая корова» .SelStart = 8 .SelLength = 5 MsgBox «SelText до = « & .SelText .SelText = «буренк» MsgBox «SelText после = « & .SelText MsgBox «SelLength после = « & .SelLength MsgBox «SelStart после = « & .SelStart .SetFocus End With End Sub |
Как выделить определенный текст в ячейке на основе другого текста?
В Excel нам может быть легко выделить ячейки на основе определенного текста, но здесь я хочу выделить определенный текст в ячейке, чтобы сделать его выдающимся, но не всю ячейку. Для большинства из нас это, возможно, неприятно. В этой статье я расскажу о некоторых хитростях для решения этой задачи в Excel.
Выделите один или несколько конкретных текстов в нескольких ячейках с кодом VBA
Например, у меня есть ряд текстовых строк, и теперь я хочу выделить конкретный текст «Небо”В этих ячейках, чтобы получить результат, как показано на следующих снимках экрана:
Чтобы выделить только часть текста в ячейке, вам может помочь следующий код VBA.
1. Выберите ячейки, в которых вы хотите выделить конкретный текст, а затем удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: выделите часть текста в ячейке:
Sub HighlightStrings()
'Updateby Extendoffice
Application.ScreenUpdating = False
Dim Rng As Range
Dim cFnd As String
Dim xTmp As String
Dim x As Long
Dim m As Long
Dim y As Long
cFnd = InputBox("Enter the text string to highlight")
y = Len(cFnd)
For Each Rng In Selection
With Rng
m = UBound(Split(Rng.Value, cFnd))
If m > 0 Then
xTmp = ""
For x = 0 To m - 1
xTmp = xTmp & Split(Rng.Value, cFnd)(x)
.Characters(Start:=Len(xTmp) + 1, Length:=y).Font.ColorIndex = 3
xTmp = xTmp & cFnd
Next
End If
End With
Next Rng
Application.ScreenUpdating = True
End Sub
3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится окно подсказки, напоминающее вам ввести текст, который вы хотите только выделить, см. снимок экрана:
4, Затем нажмите OK , весь указанный вами текст был выделен только внутри ячеек, см. снимок экрана:
Tips: Если вам нужно выделить несколько ключевых слов из текстовых строк, примените приведенный ниже код:
Код VBA: выделите несколько ключевых слов из текстовых строк:
Sub HighlightStrings()
'Updateby Extendoffice
Application.ScreenUpdating = False
Dim Rng As Range
Dim cFnd As String
Dim xTmp As String
Dim x As Long
Dim m As Long
Dim y As Long
Dim xFNum As Integer
Dim xArrFnd As Variant
Dim xStr As String
cFnd = InputBox("Please enter the text, separate them by comma:")
If Len(cFnd) < 1 Then Exit Sub
xArrFnd = Split(cFnd, ",")
For Each Rng In Selection
With Rng
For xFNum = 0 To UBound(xArrFnd)
xStr = xArrFnd(xFNum)
y = Len(xStr)
m = UBound(Split(Rng.Value, xStr))
If m > 0 Then
xTmp = ""
For x = 0 To m - 1
xTmp = xTmp & Split(Rng.Value, xStr)(x)
.Characters(Start:=Len(xTmp) + 1, Length:=y).Font.ColorIndex = 3
xTmp = xTmp & xStr
Next
End If
Next xFNum
End With
Next Rng
Application.ScreenUpdating = True
End Sub
Затем во всплывающем окне введите ключевые слова, которые вы хотите выделить (разделите слова запятыми), см. Снимок экрана:
А затем нажмите OK кнопки, указанные слова были выделены сразу, см. скриншоты:
Внимание: Приведенные выше коды чувствительны к регистру.
Выделите один или несколько конкретных текстов в нескольких ячейках с помощью удивительной функции
Если вы не знакомы с кодом в Excel, здесь я представлю простой инструмент — Kutools for Excel, С его Отметить ключевое слово вы можете выделить одно или несколько ключевых слов сразу в ячейках.
Примечание:Чтобы применить эти Отметить ключевое слово функции, во-первых, вы должны скачать Kutools for Excel, а затем быстро и легко примените функции.
После установки Kutools for Excel, пожалуйста, сделайте следующее:
1. Нажмите Кутулс > Текст > Отметить ключевое слово, см. снимок экрана:
2. В Отметить ключевое слово диалоговом окне выполните следующие действия:
- Выберите диапазон данных, который вы хотите использовать, из Диапазон текстовое окно;
- Выберите ячейки, содержащие ключевые слова, которые вы хотите выделить, вы также можете ввести ключевые слова вручную (через запятую) в поле Ключевое слово текстовое поле.
- Наконец, вы должны указать цвет шрифта для выделения текста галочкой Отметить цвета ключевых слов вариант. (Чтобы раскрасить все ячейки, содержащие ключевые слова, выберите Отметьте цвета содержимого ячейки опция)
3, Затем нажмите Ok кнопки, все указанные тексты были выделены, как показано ниже:
Внимание: Эта функция не чувствительна к регистру, если вы хотите выделить текст с учетом регистра, установите флажок С учетом регистра в Отметить ключевое слово диалоговое окно.
Выделите определенный текст в ячейке на основе другого текста с помощью кода VBA
Вот еще одна ситуация, у меня есть два столбца, первый столбец которых содержит текстовые строки, а второй столбец — это конкретный текст, теперь мне нужно выделить относительный текст в первом столбце на основе определенного текста во втором столбце для каждого ряд.
1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: выделение части текста в ячейке на основе другого текста:
Sub highlight()
'Updateby Extendoffice
Dim xStr As String
Dim xRg As Range
Dim xTxt As String
Dim xCell As Range
Dim xChar As String
Dim I As Long
Dim J As Long
On Error Resume Next
If ActiveWindow.RangeSelection.Count > 1 Then
xTxt = ActiveWindow.RangeSelection.AddressLocal
Else
xTxt = ActiveSheet.UsedRange.AddressLocal
End If
LInput:
Set xRg = Application.InputBox("please select the data range:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
If xRg.Areas.Count > 1 Then
MsgBox "not support multiple columns"
GoTo LInput
End If
If xRg.Columns.Count <> 2 Then
MsgBox "the selected range can only contain two columns "
GoTo LInput
End If
For I = 0 To xRg.Rows.Count - 1
xStr = xRg.Range("B1").Offset(I, 0).Value
With xRg.Range("A1").Offset(I, 0)
.Font.ColorIndex = 1
For J = 1 To Len(.Text)
If Mid(.Text, J, Len(xStr)) = xStr Then .Characters(J, Len(xStr)).Font.ColorIndex = 3
Next
End With
Next I
End Sub
3. После вставки кода нажмите F5 нажмите кнопку для его запуска, появится окно подсказки, напоминающее вам о выборе диапазона данных, который содержит текстовую строку и конкретный текст, который вы хотите выделить и на основе которого, см. снимок экрана:
4, Затем нажмите OK , весь соответствующий текст в первом столбце, основанный на конкретном тексте во втором столбце, был окрашен в красный цвет, как показано на следующем снимке экрана:
Больше относительных статей:
- Полужирный текст части при объединении двух столбцов в Excel
- На листе Excel после объединения двух значений ячеек с формулами вы можете обнаружить, что часть текста в объединенной ячейке формулы не будет выделена жирным шрифтом. Иногда это может раздражать, как вы можете выделить текст жирным шрифтом при объединении двух столбцов в Excel?
- Объедините столбцы ячеек и сохраните цвет текста в Excel
- Как все мы знаем, при конкатенации или объединении столбцов ячеек в один столбец форматирование ячеек (например, цвет шрифта текста, форматирование чисел и т. Д.) Будет потеряно. В этой статье я расскажу о некоторых хитростях, позволяющих объединить столбцы ячеек в один и максимально упростить сохранение цвета текста в Excel.
- Отображение определенного текста на основе значений в другом столбце
- Предположим, у меня есть список чисел, теперь я хочу отобразить какой-то конкретный текст в другом столбце на основе номеров этого столбца. Например, если номер ячейки находится в диапазоне от 1 до 100, я хочу, чтобы текст «Уменьшить» отображался в соседней ячейке, если номер находится в диапазоне от 101 до 200, отображается текст «Стабильный», а если число больше 200 , отображается текст «Увеличение», как показано на следующем снимке экрана. Для решения этой задачи в Excel вам могут помочь следующие формулы из этой статьи.
- Сумма ячеек с текстом и числами в Excel
- Например, у меня есть список значений, содержащих числовые и текстовые строки, теперь я хочу суммировать только числа на основе одного и того же текста, посмотрите на следующий снимок экрана. Обычно вы не можете напрямую суммировать значения в списке с помощью текстовой строки, здесь я представлю вам несколько формул для решения этой задачи.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Есть похожий вопрос на английском: Highlighting searched words on Vba excel
Единственная разница, в том вопросе ищется одно слово.
Адаптируем код из этого вопроса, выделим его в процедуру, вынесем все искомые значения в массив и будем вызывать процедуру в цикле:
'Выделяет заданный текст в заданном диапазоне
'Адаптирован код из ответа на Stack Overflow: https://stackoverflow.com/questions/35437207/highlighting-searched-words-on-vba-excel
Sub HighlighText(rng As Range, text As String)
Application.ScreenUpdating = False
Dim cellRange As Range
'Ищем текст на листе
Set cellRange = rng.Find(What:=text, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not cellRange Is Nothing Then
Dim cellAddress As String
cellAddress = cellRange.Address
Do
Dim textStart As Integer
textStart = 1
Do
'Ищем текст внутри ячейки
'Если требуется поиск нечувствительный к регистру, то можно привести и искомое значение и текст к нижнему регистру
'textStart = InStr(textStart, LCase(cellRange.Value), LCase(text))
textStart = InStr(textStart, cellRange.Value, text)
If textStart <> 0 Then
'Выделяем текст
cellRange.Characters(textStart, Len(text)).Font.Color = RGB(255, 0, 0)
textStart = textStart + 1
End If
'Выделяем текст пока он находится в этой ячейке
Loop Until textStart = 0
Set cellRange = rng.FindNext(After:=cellRange)
Loop Until cellRange Is Nothing Or cellRange.Address = cellAddress
End If
End Sub
Sub FindAndSelect()
'Массив слов (терминов) для выделения
Dim termsToHighlight As Variant
termsToHighlight = Array("teams", "TechnicalSuit", "Captivate", "Subscription", "Creative Cloud", "renewal", "TLP", "Stock", "Dreamweave", "CLP", _
"Spark", "FrameMaker", "Premiere Pro", "Illustrator", "Fresco", "InCopy", "enterprise", "Audition", "InDesign", "Flash", "Dimension", _
"Lightroom", "Substance", "After Effects", "Photoshop", "XD", "Animate", "Presenter", "RoboHelp")
Dim workRange As Range
Set workRange = ActiveWorkbook.Worksheets("TDSheet").Range("A1:A3000")
For Each term In termsToHighlight
HighlighText workRange, CStr(term)
Next term
End Sub
Если нужно выделять слова вне зависимости от регистра («Teams», «xd» и др.), то можно исправить функцию поиска текста, читайте комментарии.
И наоборот, если нужно искать слова именно с таким регистром, то можно проставить MatchCase:=True
.
В принципе список терминов для выделения можно хранить не в коде, а где-нибудь в самой книге Excel.