Vba регулярные выражения word

Обновлено: 07.07.2024

32 комментария для “VBA Excel. Содержание рубрики”

Здравствуйте! У Вас нет темы по работе с фильтром. Можно проконсультироваться на этот счёт?

Здравствуйте, Сергей!
Задавайте вопрос, постараюсь ответить.

Спасибо, Евгений! Имеется в Excel столбец с включённым автофильтром. Можно ли программно запустить окно фильтра для выбора значений? Т.е. не руками нажимать на иконку фильтра, а заставить окно открываться с помощью макроса. Спасибо за ответ.

Да, это возможно:

Сергей, уточните вопрос: нужно программно нажать кнопки Ok и Отмена или отследить, какая из них была нажата?

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

Пример отслеживания нажатий кнопки «OK» автофильтра. На нажатие кнопки «Отмена» код не реагирует.

myString = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address myString1 = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing Then

Range("A1").CurrentRegion можно заменить на имя таблицы.

Евгений, а формулу в поле B2 оставлять или её можно удалить?

Сергей, событие Worksheet_Calculate() не зависит от команды SendKeys "%" . Ограничение стоит здесь:

If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing Then

Код в процедуре Worksheet_Calculate() срабатывает только когда активна ячейка Range("A1") . Если заменить в этой строке Range("A1") на диапазон строки заголовков таблицы, тогда код будет срабатывать при любой активной ячейке в заголовке.

В столбце «B» не должно быть пустых ячеек до последней строки таблицы.

Как определить в VBA есть узор в ячейке?

If ActiveCell . Interior . Pattern = xlPatternNone Then

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

Set ws = ThisWorkbook . Sheets ( 1 ) 'можно указать любой лист книги 'устанавливаем защиту на все ячейки рабочего диапазона листа 'снимаем защиту только с пустых ячеек рабочего диапазона листа Set rr = ws . UsedRange . SpecialCells ( xlCellTypeBlanks ) Private Sub Workbook_BeforeClose ( Cancel As Boolean )

Добрый день, Владислав!
Замените строку

Добрый день, Евгений!
ОГРОМНОЕ СПАСИБО. :))

Здравствуйте, помогите, пожалуйста, решить задачу((

Здравствуйте, Рафия!
С разработкой кредитного калькулятора вам помогут только за плату на бирже фриланса.

Добрый день, Евгений! Я только начинаю работать с VBA. Помогите, пожалуйста, прописать код для автоматического перемещения курсора на ячейку вправо после заполнения предыдущей.

Здравствуйте, Ева! Для перемещения фокуса в ячейку справа код VBA не нужен: используйте для этого клавишу «Tab» или настройте клавишу «Enter» для перехода вправо (Файл >> Параметры >> Дополнительно).

Спасибо за ответ! Да, но это надо делать вручную; речь идёт об автоматическом перемещении курсора.

Примеры регулярных выражений

В таблице ниже собраны некоторые символы, операторы, конструкции и примеры для регулярных выражений. Более подробный справочник по регулярным выражениям вы найдете здесь.

Назначение Expression Пример
Соответствует любому одиночному символу, кроме разрыва строки Дополнительные сведения см. в разделе Любой символ. . a.o совпадает с "ато" в слове "каток" и "aзo" в слове "азот", но не с "арто" в слове "картон"
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов). Дополнительные сведения см. в разделе Совпадение ноль или несколько раз: *. * a*r совпадает с "в" в слове "винт" и "ав" в слове "авто".
Соответствует любому символу ноль или более раз. .* c.*e совпадает со "сне" в слове "снег", "сове" в слове "совет" и "скате" в слове "скатерть"
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с максимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз: +. + e+d совпадает с "eed" в "feeder" и с "ed" в "faded".
Сопоставление любого символа один или более раз. .+ e.+e совпадает с "eede" в "feeder", но в "feed" совпадения отсутствуют.
Соответствует нулю или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение ноль или несколько раз (ленивое совпадение): *?. *? \w*?d совпадает с "fad" и "ed" в "faded", но не со всем словом "faded", так как проверяется соответствие с минимальным числом символов.
Соответствует одному или большему числу вхождений предыдущего выражения (совпадение с минимальным числом символов) Дополнительные сведения см. в разделе Совпадение один или несколько раз (ленивое совпадение): +?. +? e\w+? совпадает с "ee" в "asleep" и с "ed" в "faded", но в "fade" совпадения отсутствуют.
Привязывает сопоставляемую строку к началу строки. ^ ^car совпадает с такими словами, как "продажа" и "процесс", только если они находятся в начале строки
Привязывает сопоставляемую строку к концу строки. \r?$ car\r?$ совпадает со словом "car", только если оно находится в конце строки.
Соответствует вхождению, только если оно находится в конце файла $ car$ совпадает со словом "car", только если оно находится в конце файла.
Соответствует любому отдельному символу в наборе. [abc] b[abc] совпадает с "ба", "бб" и "бв"
Соответствует любому символу в диапазоне символов. [а-е] be[n-t] совпадает с "bet" в слове "between", с "ben" в слове "beneath" и с "bes" в слове "beside", но в слове "below" совпадения отсутствуют.
Запись и неявная нумерация выражения в скобках () ([a-z])X\1 совпадает с "аХа" и "бХб", но не с "аХб". "\1" относится к первой группе выражения "[а–я]". Дополнительные сведения см. в разделе Группы записи и шаблоны замены.
Признание соответствия недействительным (?!абв) real(?!ity) совпадает со словами "реальный" и "реальность", но не со словом "реальная". Кроме того, находит второй элемент "реальн" (но не первый "реальн") в "реальнаяреальность".
Соответствует любому символу, не входящему в указанный набор. Дополнительные сведения см. в разделе Отрицательная группа символов. [^абв] be[^n-t] совпадает с "bef" в слове "before", с "beh" в слове "behind" и с "bel" в слове "below", но в слове "beneath" совпадения отсутствуют.
Совпадает с выражением до или после символа. | (sponge|mud) bath совпадает со строками "хвойный лес" и "лиственный лес"
Экранирует символ, указанный за обратной косой чертой. \ \^ соответствует символу ^
Определяет количество вхождений предыдущего символа или группы. Дополнительные сведения см. в разделе Совпадение ровно n раз: . , где n обозначает число вхождений. x(ab)x совпадает с "xababx"
x(ab)x совпадает с "xababx" и "xabababx", но не "xababababx"
Сопоставление текста в категории Юникода. Дополнительные сведения о классах символов Юникода, см. в документе о свойствах символов в стандарте Юникода 5.2. \p, где "X" — число из Юникода. \p совпадает с "T" и "D" в "Thoma Doe"
Соответствует границе слова \b (вне класса символов \b определяет границу слова, а внутри класса \b символов определяет стирание назад) \bin совпадает с "in" в "inside", но в "pinto" совпадения отсутствуют.
Соответствует разрыву строки (то есть возврату каретки с последующим символом новой строки). \r?\n End\r?\nBegin совпадает со словами "Конец" и "Начало", только если "Конец" является последним словом в строке, а "Начало" — первым словом в следующей строке
Соответствует любому алфавитно-цифровому знаку. \w a\wd совпадает с "акт" и "а1т", но не с "а т"
Соответствует любому символу пробела. \s Public\sInterface совпадает с фразой "Открытый интерфейс"
Соответствует любому символу десятичной цифры \d \d совпадает с "4" и "0" в "wd40".

Пример регулярного выражения, в котором объединяются некоторые операторы и конструкции для сопоставления с шестнадцатеричным числом: \b0[xX]([0-9a-fA-F]+)\b . Это выражение совпадает с "0xc67f", но не с "0xc67g".

Группы записи и шаблоны замены

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

Чтобы создать нумерованную группу записи, заключите в скобки часть выражения в шаблоне регулярного выражения. Выделенные части автоматически нумеруются слева направо в порядке появления открывающих скобок в регулярном выражении. Для доступа к группе записи используйте:

Внутри регулярных выражений: Используйте ключевое слово \number . Например, \1 в регулярном выражении (\w+)\s\1 обозначает первую именованную группу, то есть (\w+) .

Внутри шаблона замены: Используйте ключевое слово $number . Например, группированное регулярное выражение (\d)([a-z]) определяет две группы: первая группа содержит одну десятичную цифру, а вторая группа содержит один символ от a до z. Выражение обнаруживает четыре совпадения в следующей строке: 1a 2b 3c 4d. Строка замены z$1 ссылается только на первую группу ( $1 ) и преобразует строку в z1 z2 z3 z4.

На следующем изображении показаны регулярное выражение (\w+)\s\1 и строка замены $1 . Само регулярное выражение и шаблон замены считаются первой группой записи с автоматически присвоенным номером 1. Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.

Панель быстрой замены в Visual Studio, где отображается нумерованная группа записи

Убедитесь, что в диалоговом окне Быстрая замена нажата кнопка Использовать регулярные выражения.

Именованные группы записи

Вы можете не полагаться на автоматическую нумерацию групп записи, а присвоить им имена. Для именованной группы записи используется синтаксис (?<name>subexpression) .

Именованные группы записи, как и нумерованные, можно использовать в самом регулярном выражении или шаблоне замены. Для доступа к именованной группе захвата используйте:

Внутри регулярных выражений: Используйте ключевое слово \k<name> . Например \k<repeated> в регулярном выражении (?<repeated>\w+)\s\k<repeated> ссылается на группу записи с именем repeated , которая содержит часть выражения \w+ .

Внутри шаблона замены: Используйте ключевое слово $ . Например, $ .

На следующем изображении представлен пример регулярного выражения (?<repeated>\w+)\s\k<repeated> и строки замены $ . Само регулярное выражение и шаблон замены указывают на группу записи с именем repeated . Если вы выполните команду Заменить все в диалоговом окне Быстрая замена, Visual Studio удалит из текста повторяющиеся слова.

Панель быстрой замены в Visual Studio, где отображается именованная группа записи

Убедитесь, что в диалоговом окне Быстрая замена нажата кнопка Использовать регулярные выражения.

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

В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений.

Мы также представили эту информацию в двух форматах, чтобы вы могли ее скачать и распечатать для справки:

Escape-знаки

Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Escape-символы.

Классы символов

Класс символов соответствует какому-либо одному набору символов. Классы символов состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Классы символов.

Привязки

Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы. Метасимволы, приведенные в следующей таблице, являются привязками. Дополнительные сведения см. в разделе Привязки.

Утверждение Описание Шаблон Число соответствий
^ По умолчанию соответствие должно начинаться в начале строки. В многострочном режиме соответствие должно начинаться в начале линии. ^\d "901" в "901-333-"
$ По умолчанию соответствие должно обнаруживаться в конце строки или перед символом \n в конце строки. В многострочном режиме соответствие должно обнаруживаться до конца линии или перед символом \n в конце линии. -\d$ "-333" в "-901-333"
\A Соответствие должно обнаруживаться в начале строки. \A\d "901" в "901-333-"
\Z Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки. -\d\Z "-333" в "-901-333"
\z Соответствие должно обнаруживаться в конце строки. -\d\z "-333" в "-901-333"
\G Соответствие должно обнаруживаться в той точке, где заканчивается предыдущее соответствие. \G\(\d\) "(1)" , "(3)" , "(5)" в "(1)(3)(5)[7](9)"
\b Соответствие должно обнаруживаться на границе между символом \w (алфавитно-цифровым) и символом \W (не алфавитно-цифровым). \b\w+\s\w+\b "them theme" , "them them" в "them theme them them"
\B Соответствие не должно обнаруживаться на границе \b . \Bend\w*\b "ends" , "ender" в "end sends endure lender"

Конструкции группирования

Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Конструкции группирования.

Квантификаторы

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

Конструкции обратных ссылок

Конструкция обратных ссылок Описание Шаблон Число соответствий
\ число Обратная ссылка. Соответствует значению нумерованной части выражения. (\w)\1 "ee" в "seek"
\k< имя > Именованная обратная ссылка. Соответствует значению именованного выражения. (?<char>\w)\k<char> "ee" в "seek"

Конструкции чередования

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу "либо-либо". Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования.

Конструкция изменения Описание Шаблон Число соответствий
| Соответствует любому элементу, разделенному вертикальной чертой ( | ). th(e|is|at) "the" , "this" в "this is the day."
(?( expression ) yes | no ) Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. Выражение интерпретируется как утверждение нулевой ширины. (?(A)A\d\b|\b\d\b) "A10" , "910" в "A10 C103 910"
(?( name ) yes | no ) Соответствует да в случае соответствия именованной или нумерованной группы захвата имя; в противном случае соответствует дополнительной части нет. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg " , "\"Yiska playing.jpg\"" в "Dogs.jpg \"Yiska playing.jpg\""

Подстановки

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

Параметры регулярных выражений

Можно определить параметры, управляющие интерпретацией шаблона регулярного выражения обработчиком регулярных выражений. Многие из этих параметров можно указать в шаблоне регулярного выражения либо в виде одной или нескольких констант RegexOptions. Этот краткий справочник перечисляет только встраиваемые параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.

Встроенный параметр можно задать двумя способами:

  • С помощью прочих конструкций (?imnsx-imnsx) , где минус (-) перед параметром или набором параметров отключает эти параметры. Например, (?i-mn) включает сопоставление без учета регистра ( i ), отключает многострочный режим ( m ) и отключает захват неименованных групп ( n ). Параметр применяется к шаблону регулярного выражения от точки, в которой определен параметр, и действует либо до конца шаблона, либо до точки, в которой другая конструкция отменяет параметр.
  • С помощью конструкции группирования (?imnsx-imnsx: часть выражения ) , которая определяет параметры для только для указанной группы.

Параметр Описание Шаблон Число соответствий
i Использовать соответствие без учета регистра. \b(?i)a(?-i)a\w+\b "aardvark" , "aaaAuto" в "aardvark AAAuto aaaAuto Adam breakfast"
m Использовать многострочный режим. ^ и $ соответствуют началу и концу строки (line), а не началу и концу строки (string). Пример см. в подразделе "Многострочный режим" раздела Параметры регулярных выражений.
n Не захватывать неименованные группы. Пример см. в подразделе "Только явные захваты" раздела Параметры регулярных выражений.
s Использовать однострочный режим. Пример см. в подразделе "Однострочный режим" раздела Параметры регулярных выражений.
x Игнорировать знаки пробела в шаблоне регулярного выражения, не преобразованные в escape-последовательность. \b(?x) \d+ \s \w+ "1 aardvark" , "2 cats" в "1 aardvark 2 cats IV centurions"

Прочие конструкции

В VBA Excel для работы с регулярными выражениями используется библиотека «Microsoft VBScript Regular Expression».

Создание объекта RegExp

Ранняя привязка

Обычно рекомендуется использовать объекты с ранней привязкой, так как у них выше быстродействие, а также при написании и редактировании кода доступны подсказки в виде листа свойств-методов, появляющегося автоматически или вызываемого, при необходимости, сочетанием клавиш Ctrl+Пробел.

Раннее связывание заключается в присвоении нового экземпляра объекта RegExp переменной, уже объявленной, как переменная определенного типа (в нашем случае, как RegExp).

Для осуществления ранней привязки необходимо подключить к проекту VBA ссылку на библиотеку «Microsoft VBScript Regular Expression», для чего в редакторе VBA выбираем Tools — References…

Меню Tools окна Project-VBAProject

В открывшемся окне «References» находим строку «Microsoft VBScript Regular Expression 5.5» (если у вас ее нет, то строку «Microsoft VBScript Regular Expression 1.0»), отмечаем ее галочкой и нажимаем «ОК».

Окно References-VBAProject

Готово — ссылка добавлена.

Создание объекта RegExp с ранней привязкой:

Поздняя привязка

Позднее связывание заключается в присвоении нового экземпляра объекта RegExp переменной, объявленной как Object, с помощью функции CreateObject.

Создание объекта RegExp с поздней привязкой:

Свойства и методы объекта RegExp

Свойства объекта RegExp

Свойство Описание Значение
по умолчанию
Global Определяет продолжительность поиска:
False — до первого совпадения
True — по всему тексту
False
IgnoreCase Определяет чувствительность к регистру символов:
False — учитывать регистр
True — не учитывать регистр
False
Multiline Определяет структуру объекта:
False — однострочный
True — многострочный
False
Pattern Строка, используемая как шаблон Пустая строка

Свойства объекта RegExp доступны для чтения и записи.

Методы объекта RegExp

Метод Синтаксис Описание
Execute Execute(myStr)
myStr — строка для поиска
Возвращает коллекцию найденных по шаблону подстрок в виде агрегатного объекта
Replace Replace(myStr,myRep)
myStr — строка для поиска
myRep — строка для замены
Возвращает строку, в которой найденные по шаблону вхождения в исходной строке заменены на указанную подстроку.
Test Test(myText)
myText — строка для проверки
Возвращает булево значение как результат проверки соответствия строки шаблону

Свойства объектов Match и Matches Collection

Метод Execute объекта RegExp возвращает агрегатный объект Matches Collection, который содержит коллекцию объектов Match, представляющих все совпадения, найденные механизмом регулярных выражений, в том порядке, в котором они присутствуют в исходной строке. Если совпадений нет, метод возвращает объект Matches Collection без членов.

Свойства объекта Matches Collection

Свойство Описание
Count Количество объектов Match, содержащихся в объекте Matches Collection
Item Индекс члена коллекции от нуля до значения свойства Count минус 1

Свойства объекта Matches Collection доступны только для чтения.

Свойства объекта Match

Свойство Описание
FirstIndex Позиция в исходной строке, где произошло совпадение, причем первая позиция в строке равна нулю
Length Длина совпавшей подстроки
Value Найденная подстрока (является свойством по умолчанию)

Свойства объекта Match доступны только для чтения.

Символы и метасимволы

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

Метасимвол
(сочетание символов)
Значение
\ После этого знака метасимвол обозначает сам себя, а некоторые символы приобретают другое значение
^ Начало строки
$ Конец строки
? Ни одного или один любой символ
* Ни одного или несколько любых символов
+ Один или несколько любых символов
. Любой символ, кроме знака «новая строка»
Определяет интервал символов
| Знак «или»
Точное количество символов, стоящих перед
Количество от n до m символов, стоящих перед
[abc] Любой из указанных символов
[^abc] Любой из неуказанных символов
[a-z] Любой символ из диапазона
[^a-z] Любой символ, не входящий в диапазон
\b Конец слова
\B Не конец слова
\d Цифра
\D Не цифра
\w Любая буква, цифра или знак подчеркивания
\W Не буква, не цифра и не знак подчеркивания
\s Пробел
\S Не пробел

В таблицу не включены редко используемые сочетания, ознакомиться с которыми можно в справочной системе разработчика. А примеры использования метасимволов в шаблонах очень хорошо представлены на этом ресурсе в разделе 4. Метасимволы.

Читайте также: