Як використовувати RegEx у Microsoft Word - Поради Excel

Лісса запитує:

Чи є спосіб змінити число (завжди випадкове число) після слова лисиця? Приклад: лисиця 23, ведмідь 1, лисиця 398, жаба 12, лисиця 15. Я хочу змінити число на такий же колір слова лисиця.

Ми можемо знайти та замінити за форматом у Microsoft Word. Це відмінна функція для швидкого пошуку відформатованого тексту та навіть заміни цілого текстового формату в документі.

Виберіть Додатковий пошук на стрічці.

Діалогове вікно пошуку та заміни

Введіть текст для пошуку, потім натисніть кнопку Більше, щоб переглянути додаткові параметри, і натисніть кнопку Формат.

Додаткові параметри пошуку

Виберіть у налаштуваннях параметр Шрифт, після чого ви зможете встановити колір тексту, який ви хотіли б знайти в документі. Натисніть OK, щоб закрити діалогове вікно «Знайти шрифт».

Виберіть колір тексту у діалоговому вікні "Знайти шрифт".

Клацніть «Знайти далі», і ви побачите, що текст, який шукається, буде виділений першим кольором.

Знайти Далі, щоб знайти першу подію.

Ми також можемо робити більш складні пошуки, використовуючи символи підстановки. Однак власний модуль пошуку Word не дозволяє нам здійснювати пошук, як просила Лісса.

Ось тут ми можемо закликати RegEx до гри!

Бібліотека регулярних виразів VBSCript

VBA не постачається з підтримкою регулярних виразів. Однак бібліотека Microsoft VBScript містить потужні можливості регулярних виразів. Ця бібліотека є частиною Internet Explorer 5.5 і пізніших версій, тому вона доступна на всіх комп’ютерах під управлінням Windows XP, Vista, 7, 8, 8.1 або 10.

Користувачі Mac

Оскільки Internet Explorer не є програмою для Mac, ця бібліотека не існує в Mac. Тому наведені нижче зразки VBA не працюють на Mac.

Щоб використовувати цю бібліотеку у VBA, перейдіть на VBE, виберіть проект та посилання в меню VBE, а потім прокрутіть список вниз, щоб знайти пункт «Microsoft VBScript Regular Expressions 5.5», і поставте галочку для включення до програми.

Бібліотека регулярних виразів VBScript

Вставте новий модуль та скопіюйте та вставте наступний код у цей модуль.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Ця процедура бере зразок тексту, знаходить коди товару за заданим шаблоном - який починається з "лисиці", одинарним пробілом і числом, і друкує відповідні коди у вікні "Безпосереднє" (натисніть Ctrl + G у VBE, якщо це не так) вже видно).

Відповідні коди товарів, надруковані у вікні Негайне.

d+ Клас символів у шаблоні визначає один або кілька числових символів, і шаблон, в основному, є префіксом "лисиця", за яким слідує пробіл, а потім цифри.

Більше інформації

Відвідайте Мова регулярних виразів - Короткий довідник, щоб отримати додаткову інформацію про екрани символів, класи символів та якорі.

Скопіюйте та вставте наступний код, щоб побачити RegEx в дії, щоб видалити пробіли з кодів продуктів.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Ця процедура замінює зразок текстового вмісту, видаляючи пробіли з кодів товарів, що відповідають заданому шаблону, і друкує результат тексту у вікні Негайне.

Замінений текст, надрукований у вікні негайного.

Зверніть увагу, що шаблон трохи відрізняється від першого коду. Умови за цим шаблоном укладені в дужки, а відповідні терміни використовуються в методі Заміна як $ 1 та $ 2 по порядку. Ця процедура просто поєднує два терміни без пробілів.

Повернутися до запитання

Повернемося до зразкового тексту, який ми використовували на початку цієї статті.

Зразок тексту

Нам потрібно знайти "лисиця", за якою слідують цифрові символи, і змінити відповідність, використовуючи колір розділу "лисиця" у відповідному тексті.

Хоча RegEx дуже добре відповідає заданому шаблону, він не може замінити колір тексту в документі Word. Отже, ми поєднаємо методи RegEx та Word VBA у наступній процедурі.

Ось кроки:

  1. Знайдіть збіги за допомогою RegEx.
  2. Шукайте кожен відповідний текст за допомогою методу Word Find.
  3. Знайдіть колір першого слова у знайденому діапазоні.
  4. Змініть колір знайденого діапазону на колір на попередньому кроці.

Перейдіть на VBE та вставте новий модуль. Переконайтеся, що бібліотека регулярних виразів VBScript додана до проекту, і скопіюйте та вставте наступний код у цей новий модуль.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Запустіть код, і ось результат.

Результат

Завантажте файл Word

Щоб завантажити файл Word: how-to-use-regex-in-microsoft-word.docm

RegEx в Excel?

Regex повністю відсутній в Excel. Однак ми все ще можемо використовувати регулярні вирази VBScript в Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Цікаві статті...