Выделенный текст vba excel

@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 выделился что бы если пользователь начнет вводить новый артикул то не нужно было удалять старый. (выделеный текст при вводе нового стираться)  

  это все нужно что бы оператор смог быстро очень быстро набивать позиции.

Выделение заданного фрагмента текста в ячейке

igrtsk

Дата: Пятница, 29.11.2013, 10:11 |
Сообщение № 1

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

50

±

Замечаний:
0% ±


Excel 2016

Доброго времени суток всем форумчанам!
Подскажите, как используя макрос (или другие инструменты excel) сделать выделенным определенный текст из всего написанного в ячейке. При условии, что данный фрагмент, который необходимо выделить, может находиться на любой позиции с точки зрения привязки к порядковому номеру символа.

К сообщению приложен файл:

5571846.xls
(44.5 Kb)


Инструктор по применению лосей в кавалерийских частях РККА

 

Ответить

nilem

Дата: Пятница, 29.11.2013, 10:42 |
Сообщение № 2

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

igrtsk, привет
можно, например, так
[vba]

Код

Sub ertert()
Dim s$, r As Range, i&, j&
s = Range(«E3»).Value: j = Len(s)
With Range(«C1», Cells(Rows.Count, 3).End(xlUp))
      .Font.Bold = False
      For Each r In .Cells
          i = InStr(r, s)
          If i Then r.Characters(i, j).Font.Bold = True
      Next
End With
End Sub

[/vba]
в файле пишем нужное слово в яч. Е3 и нажимаем зел. кнопку

ПС ну как там лоси поживают? :)

К сообщению приложен файл:

_5571846.xls
(43.5 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilemПятница, 29.11.2013, 10:43

 

Ответить

igrtsk

Дата: Пятница, 29.11.2013, 10:58 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

50

±

Замечаний:
0% ±


Excel 2016


Спасибо!
Интересный вариант. Надо его осмыслить.

P.S. Лоси в порядке. Передают привет! :D


Инструктор по применению лосей в кавалерийских частях РККА

 

Ответить

Саня

Дата: Пятница, 29.11.2013, 11:08 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

не успел, но все же

Выделяем ячейки и выполняем проц. DoIt:
[vba]

Код

Option Explicit
Private mavPunct()

Sub DoIt()
       mavPunct = Array(» «, «,», «.», «;», «:», «!»)
       ‘ символы, к-рые могут идти после искомого слова _
         нужно, чтобы искть ТОЛЬКО целые слова

       Dim c As Range
       For Each c In Selection
           BoldWord c, «украл»
       Next c
End Sub

‘=================================================================
Sub BoldWord(rngIn As Range, sWord As String)
       Dim lPos As Long
       lPos = 1

       Dim lLen As Long
       lLen = Len(sWord)

       Dim sLS As String
       Do
           lPos = InStr(lPos, rngIn.Value, sWord)
           If lPos = 0 Then Exit Do

           sLS = Mid$(rngIn.Value, lPos + lLen, 1)
           If bSymbolIsValid(sLS) Then
               rngIn.Characters(lPos, lLen).Font.Bold = True
           End If

           lPos = lPos + lLen
       Loop
End Sub

Function bSymbolIsValid(sS As String) As Boolean
       Dim i As Integer
       For i = LBound(mavPunct) To UBound(mavPunct)
           If sS = mavPunct(i) Then
               bSymbolIsValid = True
               Exit For
           End If
       Next i
End Function
‘=================================================================

[/vba]

 

Ответить

igrtsk

Дата: Пятница, 29.11.2013, 12:11 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

50

±

Замечаний:
0% ±


Excel 2016


Успел! Успел!
Ваш вариант мне больше подходит.
Действительно, в моем случае рассматриваются только целые слова, и разнообразие слов (словосочетаний), которые необходимо выделять — невелико.
Спасибо!


Инструктор по применению лосей в кавалерийских частях РККА

 

Ответить

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 символов

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub Макрос2()
    With ActiveCell.Characters(Start:=1, Length:=1).Font
        .Name = "Calibri"
        .FontStyle = "обычный"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=2, Length:=3).Font
        .Name = "Calibri"
        .FontStyle = "обычный"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .Color = -16776961
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    With ActiveCell.Characters(Start:=5, Length:=1).Font
        .Name = "Calibri"
        .FontStyle = "обычный"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
End Sub

Добавлено через 31 секунду
записано с помощью макрорекордера



1



4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

24.10.2013, 22:32

3

to markiza-inc. А можна узнать — чем Вы руководствуетесь, когда выделяете? Какие критерии? А можна как-то машину научить «думать» как Вы (это не из области фантастики!)?



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,

Цитата
Сообщение от markiza-inc
Посмотреть сообщение

Такая команда: .Characters(Start:=x, Length:=y).

Что, если на форму кинуть текстбоксы, в них вводить координаты нужного «куска», приравнивать переменные, а затем запускать макрос кнопкой «Go!!!» ?

Добавлено через 19 минут

Visual Basic
1
2
3
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox "Вы выбрали ячейку с адресом: " & Target.Address
End Sub

а так же

Visual Basic
1
2
X = ActiveCell.Row
Y = ActiveCell.Column

могут помочь обойти и текстбоксы

Добавлено через 6 минут
Сори за офтоп, только прочитал ТС

Visual Basic
1
2
3
 Left (String, Length)
Right (String, Length)
Mid (String, Start, [, Length])

?



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

Возможно, я чего-то недопонял?
Что мешает на данное событие сделать нужную нам обработку (естественно, нужному фрагменту текста придав соответствующее форматирование)?

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i&
For i = 1 To Len(Target)
  If Target.Characters(i, 1).Font.FontStyle = "полужирный" Then
    'требуемые действия
  End If
Next i
End Sub



0



905 / 232 / 100

Регистрация: 21.10.2012

Сообщений: 567

25.10.2013, 16:33

 [ТС]

15

На событие действительно можно, а на макрос не идет. Хотя макросы на панели при выделении текста в ячейке остаются активными, но обработки нет.



0



Апострофф

Заблокирован

25.10.2013, 18:25

16

Попробуйте ещё раз:

Этот код вставьте в модуль ЭтаКнига

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i&
For i = 1 To Len(Target)
  If Target.Characters(i, 1).Font.FontStyle = "полужирный" Then
    'требуемые действия
    MsgBox "Что делаем с символом " & Target.Characters(i, 1).Text
    Target.Characters(i, 1).Font.FontStyle = "обычный"
  End If
Next i
End Sub

Выделите часть текста в ячейке.

Задайте формат Ж (B(old)) выделению.

Нажмите Enter.

Не по теме:

Я понимаю, что вам хотелось запустить обработку, находясь в самой ячейке,
но так и не осознал смысла этой прихоти.



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

25.10.2013, 19:45

17

Цитата
Сообщение от Апострофф
Посмотреть сообщение

не осознал смысла этой прихоти

аналогично, шеф
есть подозрение, что реальную задачу можно и нужно решать иначе.
но — если уж секрет, то секрет.

так как не осознал и не проникся, могу предложить

способ

.
вполне реализуемый, но это уже не ко мне.
способ не без недостатков.
но… на безрыбрье, как говорится.
итак
1. отлавливаем селекшнчейндж ячеек интересующего нас диапазона
2. на месте активной ячейки рисуем текстбокс (точнее — делаем видимым и перемещаем нарисованный заранее)
3. в текстбокс копируем текст из ячейки
4. после выделения нужной части текста в текстбоксе вполне можно запустить макрос — хоть по хоткею, хоть по кнопке на панели/ленте
5. у текстбокса есть свойства SelStart, SelText и т.п. Запускаем нужную обработку, прячем текстбокс и (при необходимости) обновляем текст в ячейке.

пс. да-да, я знаю, что это изврат. поэтому без файла и кода.
ппс. из недостатков: текст в текстбоксе нельзя отформатировать «по частям». но можно попробовать обойти — поискать и прицепить другой контрол с возможностями побогаче… какой именно — не знаю



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

Цитата
Сообщение от markiza-inc
Посмотреть сообщение

А ведь Excel — это редактор … формул.

вот это новость!
Вы это где-то прочитали? или таки сами придумали?
редактор формул — это Microsoft Equation.
или его аналоги.
да что угодно — вплоть до программ символьной математики и систем верстки…

а 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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка 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.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Выделенные ячейки excel delphi
  • Выделенные фрагменты word буфер обмена
  • Выделенные строки макросом excel
  • Выделенные области в word
  • Выделенная ячейка в excel в макросе

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии