Поиск текста по шаблону excel

Разбор текста регулярными выражениямиОдной из самых трудоемких и неприятных задач при работе с текстом в Excel является парсинг — разбор буквенно-цифровой «каши» на составляющие и извлечение из нее нужных нам фрагментов. Например:

  • извлечение почтового индекса из адреса (хорошо, если индекс всегда в начале, а если нет?)
  • нахождение номера и даты счета из описания платежа в банковской выписке
  • извлечение ИНН из разношерстных описаний компаний в списке контрагентов
  • поиск номера автомобиля или артикула товара в описании и т.д.

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

  • Использовать встроенные текстовые функции Excel для поиска-нарезки-склейки текста: ЛЕВСИМВ (LEFT), ПРАВСИМВ (RIGHT), ПСТР (MID), СЦЕПИТЬ (CONCATENATE) и ее аналоги, ОБЪЕДИНИТЬ (JOINTEXT), СОВПАД (EXACT) и т.д. Этот способ хорош, если в тексте есть четкая логика (например, индекс всегда в начале адреса). В противном случае формулы существенно усложняются и, порой, дело доходит даже до формул массива, что сильно тормозит на больших таблицах.
  • Использование оператора проверки текстового подобия Like из Visual Basic, обернутого в пользовательскую макро-функцию. Это позволяет реализовать более гибкий поиск с использованием символов подстановки (*,#,? и т.д.) К сожалению, этот инструмент не умеет извлекать нужную подстроку из текста — только проверять, содержится ли она в нем.

Кроме вышеперечисленного, есть еще один подход, очень известный в узких кругах профессиональных программистов, веб-разработчиков и прочих технарей — это регулярные выражения (Regular Expressions = RegExp = «регэкспы» = «регулярки»). Упрощенно говоря, RegExp — это язык, где с помощью специальных символов и правил производится поиск нужных подстрок в тексте, их извлечение или замена на другой текст. Регулярные выражения — это очень мощный и красивый инструмент, на порядок превосходящий по возможностям все остальные способы работы с текстом. Многие языки программирования (C#, PHP, Perl, JavaScript…) и текстовые редакторы (Word, Notepad++…) поддерживают регулярные выражения.

Microsoft Excel, к сожалению, не имеет поддержки RegExp по-умолчанию «из коробки», но это легко исправить с помощью VBA. Откройте редактор Visual Basic с вкладки Разработчик (Developer) или сочетанием клавиш Alt+F11. Затем вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такой макрофункции:

Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = Pattern
    regex.Global = True
    If regex.Test(Text) Then
        Set matches = regex.Execute(Text)
        RegExpExtract = matches.Item(Item - 1)
        Exit Function
    End If
ErrHandl:
    RegExpExtract = CVErr(xlErrValue)
End Function

Теперь можно закрыть редактор Visual Basic и, вернувшись в Excel, опробовать нашу новую функцию. Синтаксис у нее следующий:

=RegExpExtract( Txt ; Pattern ; Item )

где

  • Txt — ячейка с текстом, который мы проверяем и из которого хотим извлечь нужную нам подстроку
  • Pattern — маска (шаблон) для поиска подстроки
  • Item — порядковый номер подстроки, которую надо извлечь, если их несколько (если не указан, то выводится первое вхождение)

Самое интересное тут, конечно, это Pattern — строка-шаблон из спецсимволов «на языке» RegExp, которая и задает, что именно и где мы хотим найти. Вот самые основные из них — для начала:

 Паттерн  Описание
 . Самое простое — это точка. Она обозначает любой символ в шаблоне на указанной позиции.
 s Любой символ, выглядящий как пробел (пробел, табуляция или перенос строки).
 S Анти-вариант предыдущего шаблона, т.е. любой НЕпробельный символ.
 d Любая цифра
 D Анти-вариант предыдущего, т.е. любая НЕ цифра
 w Любой символ латиницы (A-Z), цифра или знак подчеркивания
 W Анти-вариант предыдущего, т.е. не латиница, не цифра и не подчеркивание.
[символы] В квадратных скобках можно указать один или несколько символов, разрешенных на указанной позиции в тексте. Например ст[уо]л будет соответствовать любому из слов: стол или стул.
Также можно не перечислять символы, а задать их диапазоном через дефис, т.е. вместо [ABDCDEF] написать [A-F]. или вместо [4567] ввести [4-7]. Например, для обозначения всех символов кириллицы можно использовать шаблон [а-яА-ЯёЁ].
[^символы] Если после открывающей квадратной скобки добавить символ «крышки» ^, то набор приобретет обратный смысл — на указанной позиции в тексте будут разрешены все символы, кроме перечисленных. Так, шаблон [^ЖМ]уть найдет Путь или Суть или Забудь, но не Жуть или Муть, например.
 | Логический оператор ИЛИ (OR) для проверки по любому из указанных критериев. Например чет|счёт|invoice) будет искать в тексте любое из указанных слов. Обычно набор вариантов заключается в скобки.
 ^ Начало строки
 $ Конец строки
 b Край слова

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

  Квантор  Описание
 ? Ноль или одно вхождение. Например .? будет означать один любой символ или его отсутствие.
 + Одно или более вхождений. Например d+ означает любое количество цифр (т.е. любое число от 0 до бесконечности).
 * Ноль или более вхождений, т.е. любое количество. Так s* означает любое количество пробелов или их отсутствие.
{число} или
{число1,число2}
Если нужно задать строго определенное количество вхождений, то оно задается в фигурных скобках. Например d{6} означает строго шесть цифр, а шаблон s{2,5} — от двух до пяти пробелов

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

Извлекаем числа из текста

Для начала разберем простой случай — нужно извлечь из буквенно-цифровой каши первое число, например мощность источников бесперебойного питания из прайс-листа:

Извлекаем первое число из текста

Логика работы регулярного выражения тут простая: d — означает любую цифру, а квантор + говорит о том, что их количество должно быть одна или больше. Двойной минус перед функцией нужен, чтобы «на лету» преобразовать извлеченные символы в полноценное число из числа-как-текст.

Почтовый индекс

На первый взгляд, тут все просто — ищем ровно шесть цифр подряд. Используем спецсимвол d для цифры и квантор {6} для количества знаков:

Извлекаем почтовый индекс

Однако, возможна ситуация, когда левее индекса в строке стоит еще один большой набор цифр подряд (номер телефона, ИНН, банковский счет и т.д.) Тогда наша регулярка выдернет из нее первых 6 цифр, т.е. сработает некорректно:

Ошибочное извлечение индекса

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

Извлекаем ровно 6-разрядное число

Телефон

Проблема с нахождением телефонного номера среди текста состоит в том, что существует очень много вариантов записи номеров — с дефисами и без, через пробелы, с кодом региона в скобках или без и т.д. Поэтому, на мой взгляд, проще сначала вычистить из исходного текста все эти символы с помощью нескольких вложенных друг в друга функций ПОДСТАВИТЬ (SUBSTITUTE), чтобы он склеился в единое целое, а потом уже примитивной регуляркой d{11} вытаскивать 11 цифр подряд:

Вытаскиваем номер телефона из текста

ИНН

Тут чуть сложнее, т.к. ИНН (в России) бывает 10-значный (у юрлиц) или 12-значный (у физлиц). Если не придираться особо, то вполне можно удовлетвориться регуляркой d{10,12}, но она, строго говоря, будет вытаскивать все числа от 10 до 12 знаков, т.е. и ошибочно введенные 11-значные. Правильнее будет использовать два шаблона, связанных логическим ИЛИ оператором | (вертикальная черта):

Извлечение ИНН из текстовой строки

Обратите внимание, что в запросе мы сначала ищем 12-разрядные, и только потом 10-разрядные числа. Если же записать нашу регулярку наоборот, то она будет вытаскивать для всех, даже длинных 12-разрядных ИНН, только первые 10 символов. То есть после срабатывания первого условия дальнейшая проверка уже не производится:

Некорректное извлечение ИНН

Это принципиальное отличие оператора | от стандартной экселевской логической функции ИЛИ (OR), где от перестановки аргументов результат не меняется.

Артикулы товаров

Во многих компаниях товарам и услугам присваиваются уникальные идентификаторы — артикулы, SAP-коды, SKU и т.д. Если в их обозначениях есть логика, то их можно легко вытаскивать из любого текста с помощью регулярных выражений. Например, если мы знаем, что наши артикулы всегда состоят из трех заглавных английских букв, дефиса и последующего трехразрядного числа, то:

Артикулы

Логика работы шаблона тут проста. [A-Z] — означает любые заглавные буквы латиницы. Следующий за ним квантор {3} говорит о том, что нам важно, чтобы таких букв было именно три. После дефиса мы ждем три цифровых разряда, поэтому добавляем на конце d{3}

Денежные суммы

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

Извлечь стоимость (цену) из текста

Паттерн d с квантором + ищет любое число до дефиса, а d{2} будет искать копейки (два разряда) после.

Если нужно вытащить не цены, а НДС, то можно воспользоваться третьим необязательным аргументом нашей функции RegExpExtract, задающим порядковый номер извлекаемого элемента. И, само-собой, можно заменить функцией ПОДСТАВИТЬ (SUBSTITUTE) в результатах дефис на стандартный десятичный разделитель и добавить двойной минус в начале, чтобы Excel интерпретировал найденный НДС как нормальное число:

Извлекаем суммы и НДС из текста

Автомобильные номера

Если не брать спецтранспорт, прицепы и прочие мотоциклы, то стандартный российский автомобильный номер разбирается по принципу «буква — три цифры — две буквы — код региона». Причем код региона может быть 2- или 3-значным, а в качестве букв применяются только те, что похожи внешне на латиницу. Таким образом, для извлечения номеров из текста нам поможет следующая регулярка:

Извлекаем автомобильный номер из текста

Время

Для извлечения времени в формате ЧЧ:ММ подойдет такое регулярное выражение:

Извлекаем время из текста

После двоеточия фрагмент [0-5]d, как легко сообразить, задает любое число в интервале 00-59. Перед двоеточием в скобках работают два шаблона, разделенных логическим ИЛИ (вертикальной чертой):

  • [0-1]d — любое число в интервале 00-19
  • 2[0-3] — любое число в интервале 20-23

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

Проверка пароля

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

Проверку можно организовать с помощью вот такой несложной регулярки:

Проверка пароля регулярным выражением

По сути, таким шаблоном мы требуем, чтобы между началом (^) и концом ($) в нашем тексте находились только символы из заданного в квадратных скобках набора. Если нужно проверить еще и длину пароля (например, не меньше 6 символов), то квантор + можно заменить на интервал «шесть и более» в виде {6,}:

Проверка длины пароля

Город из адреса

Допустим, нам нужно вытащить город из строки адреса. Поможет регулярка, извлекающая текст от «г.» до следующей запятой:

Извлечь город из адреса

Давайте разберем этот шаблон поподробнее.

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

Следующих два символа в нашем шаблоне — точка и звездочка-квантор — обозначают любое количество любых символов, т.е. любое название города.

На конце шаблона стоит запятая, т.к. мы ищем текст от «г.» до запятой. Но ведь в тексте может быть несколько запятых, правда? Не только после города, но и после улицы, дома и т.д. На какой из них будет останавливаться наш запрос? Вот за это отвечает вопросительный знак. Без него наша регулярка вытаскивала бы максимально длинную строку из всех возможных:

Извлекаем город из адреса - жадный квантор

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

Скупой квантор

Имя файла из полного пути

Еще одна весьма распространенная ситуация — вытащить имя файла из полного пути. Тут поможет простая регулярка вида:

Извлечь имя файла из полного пути

Тут фишка в том, что поиск, по сути, происходит в обратном направлении — от конца к началу, т.к. в конце нашего шаблона стоит $, и мы ищем все, что перед ним до первого справа обратного слэша. Бэкслэш заэкранирован, как и точка в предыдущем примере.

P.S.

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

Для анализа и разбора чужих регулярок или отладки своих собственных есть несколько удобных онлайн-сервисов: RegEx101, RegExr и др.

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

Если же вы не новичок в теме, и вам есть чем поделиться — оставляйте полезные при работе в Excel регулярки в комментариях ниже. Один ум хорошо, а два сапога — пара!

Ссылки по теме

  • Замена и зачистка текста функцией ПОДСТАВИТЬ (SUBSTITUTE)
  • Поиск и подсветка символов латиницы в русском тексте
  • Поиск ближайшего похожего текста (Иванов = Ивонов = Иваноф и т.д.)

Skip to content

Поиск и замена в Excel с помощью регулярных выражений

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

Когда дело доходит до замены одного фрагмента текста другим, Microsoft Excel предоставляет ряд опций на выбор, включая инструмент «Найти и заменить» и несколько текстовых функций замены. Зачем кому-то усложнять ситуацию с помощью регулярных выражений? Но дело в том, что стандартные функции Excel могут обрабатывать только ту строку текста, которую вы явным образом укажете. Чтобы найти строку, соответствующую некоторому шаблону, и заменить ее чем-то другим, необходимы регулярные выражения.

Вот о чем мы будем говорить в этой статье:

  • Функция замены при помощи регулярных выражений Excel VBA
  • Замена текста, соответствующего шаблону
  • Замена чисел в тексте
  • Заменить денежные суммы
  • Поиск и замена всех совпадений
  • Замена определенного по счёту экземпляра
  • Поиск и замена в Excel с помощью Regex Tools

Регулярное выражение – это шаблон, состоящий из последовательности символов, который можно использовать для поиска соответствующих символов в тексте.

Функция замены при помощи регулярных выражений Excel VBA

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


Public Function RegExpReplace(text As String, pattern As String, text_replace As String, Optional instance_num As Integer = 0, Optional match_case As Boolean = True) As String
    Dim text_result, text_find As String
    Dim matches_index, pos_start As Integer
 
    On Error GoTo ErrHandle
    text_result = text
    Set regex = CreateObject("VBScript.RegExp")
 
    regex.pattern = pattern
    regex.Global = True
    regex.MultiLine = True
 
    If True = match_case Then
        regex.ignorecase = False
    Else
        regex.ignorecase = True
    End If
 
    Set matches = regex.Execute(text)
 
    If 0 < matches.Count Then
        If (0 = instance_num) Then
            text_result = regex.Replace(text, text_replace)
        Else
            If instance_num <= matches.Count Then
                pos_start = 1
                For matches_index = 0 To instance_num - 2
                    pos_start = InStr(pos_start, text, matches.item(matches_index), vbBinaryCompare) + Len(matches.item(matches_index))
                Next matches_index
 
                text_find = matches.item(instance_num - 1)
                text_result = Left(text, pos_start - 1) & Replace(text, text_find, text_replace, pos_start, 1, vbBinaryCompare)
            End If
        End If
    End If
 
    RegExpReplace = text_result
    Exit Function
 
ErrHandle:
    RegExpReplace = CVErr(xlErrValue)
End Function

Добавьте этот код VBA в вашу рабочую книгу.

 Советы:

  • Если у вас мало опыта работы с VBA, это руководство проведет вас через процесс: Как создать пользовательскую функцию VBA в Excel .
  • После добавления кода не забудьте сохранить файл как книгу с поддержкой макросов (.xlsm).

Синтаксис RegExpReplace

Функция RegExpReplace ищет во входной строке значения, соответствующие регулярному выражению, и заменяет найденные совпадения указанным вами текстом.

Функция принимает 5 аргументов, но обязательными являются только первые три.

RegExpReplace(текст; шаблон; text_replace; [instance_num]; [match_case])

Где:

  • Текст (обязательно) — текстовая строка для поиска.
  • Шаблон (обязательно) — регулярное выражение для сопоставления.
  • Text_replace (обязательно) — текст для замены найденных совпадающих подстрок.
  • Instance_num (необязательно) — порядковый номер, указывающий, какой из найденных экземпляров заменить. Если его не указать, функция заменит все найденные совпадения (по умолчанию).
  • Match_case (необязательный) — определяет, следует ли учитывать или же игнорировать регистр букв. Если значение ИСТИНА или опущено (по умолчанию), при поиске учитывается регистр; если ЛОЖЬ – то поиск совпадений происходит без учета регистра.

Функция работает во всех версиях Excel от 365 до 2010.

Полезные советы по использованию

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

  1. По умолчанию функция работает в режиме Заменить все. Чтобы заменить конкретное вхождение, поместите соответствующий номер в аргумент instance_num.
  2. По умолчанию функция чувствительна к регистру. Для поиска без учета регистра задайте для аргумента match_case значение ЛОЖЬ.
  3. Когда вы указываете регулярное выражение непосредственно в формуле, не забудьте заключить его в двойные кавычки (так как это текст).
  4. Если допустимый шаблон не найден, функция вернет исходное содержимое без изменений.
  5. Если регулярное выражение записано вами неверно, произойдет ошибка  #ЗНАЧ!.

Примеры регулярных выражений для поиска и замены в Excel

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

Замена строки, соответствующей шаблону

В приведенном ниже примере набора данных предположим, что вы хотите скрыть некоторые личные данные, такие как номер телефона. Учитывая, что это семизначное число в формате «000-00-00», для его нахождения мы используем следующее регулярное выражение.

Шаблон: d{3}-d{2}-d{4}

Для замены используется эта строка:

Текст замены : ХХХ-ХХ-ХХ

С исходной строкой в ​​A5 полная формула принимает следующий вид:

=RegExpReplace(A5; «d{3}-d{2}-d{2}»; «XXX-XX-XX»)

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

=RegExpReplace(A5; $A$2; $B$2)

Замена чисел в тексте

Чтобы найти любую цифру от 0 до 9, используйте d в своем регулярном выражении. Чтобы найти определенные цифры, используйте соответствующий квантификатор или создайте более сложное регулярное выражение, как показано в примерах ниже.

Заменить все числа

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

Шаблон : d+

Например, чтобы заменить все числа в ячейке A5 звездочкой, используйте следующую формулу:

=RegExpReplace(A5; «d+»; «*»)

Заменить суммы денег

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

Шаблон : ‘($d+.?d{0,2}b)|(₽d+.?d{0,2}b)|(d+.?d{0,2}₽)

Это регулярное выражение ищет и заменяет денежные величины вида $100, ₽100 и 100₽. Естественно, вы можете использовать и другие обозначения валюты платежа.

Вы ищете знак доллара или рубля, за которым следует одна или несколько цифр $d+ — эта часть соответствует единице доллара, ₽d+ означает соответственно рубли. После основной единицы может быть или не быть дробной единицы. Чтобы соответствовать ему, вы ищете ноль или один знак десятичного разряда (точку), после которого идут от 0 до 2 цифр .?d{0,2}. Граница слова b в конце гарантирует, что совпадающее значение не является частью большего числа.

Третья часть выражения ищет цифры, после которых могут быть (или не быть) два десятичных знака, и затем – знак рубля.

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

=RegExpReplace(A5; «‘($d+.?d{0,2}b)|(₽d+.?d{0,2}b)|(d+.?d{0,2}₽)»; «*»)

На скриншоте вы видите, как регулярное выражение помогло заменить денежные единицы звёздочками.

Поиск и замена всех совпадений

В классических регулярных выражениях есть глобальный флаг поиска /g, который заставляет регулярное выражение находить все возможные совпадения в строке. В VBA этот флаг не поддерживается. Вместо этого объект VBA RegExp предоставляет свойство Global, которое определяет, следует ли искать все вхождения или только первое. 

В коде нашей функции для свойства Global установлено значение True, что означает, что шаблон должен проверяться на все возможные совпадения в строке.

Итак, что вы делаете, чтобы заменить все вхождения, соответствующие шаблону? Ничего особенного. Это поведение реализовано по умолчанию. Вы в этом можете убедиться, еще раз внимательно взглянув на пример выше. В тексте заменены все подходящие комбинации символов, а не только первое вхождение.

Замена определенного по счёту экземпляра

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

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

=RegExpReplace(A5; $A$2; $B$2; 2)

Где $A$2 — шаблон регулярного выражения, а $B$2 — замещающий текст.

Как видно на скриншоте выше, второй телефон успешно заменён.

Поиск и замена в Excel с помощью Regex Tools

Вы слышали о недавнем дополнении к Ultimate Suite? Я имею в виду четыре мощных инструмента регулярных выражений , представленных в последней версии. По сравнению со своими аналогами VBA функции Ablebits Regex имеют два основных преимущества:

  • Вы можете использовать регулярные выражения в обычных книгах .xlsx без необходимости вставлять какой-либо код или включать макросы в Excel.
  • Обрабатываемые стандартным механизмом .NET RegEx, эти функции поддерживают полнофункциональные классические регулярные выражения и преодолевают многие ограничения VBA RegExp.

Функция AblebitsRegexReplace ищет совпадение с указанным регулярным выражением в ячейке и заменяет его указанными символами.

Синтаксис ее совершенно такой же, как у функции RegExpReplace, а вот возможности немного другие.

Ниже вы найдете пример замены регулярных выражений, который нельзя выполнить с помощью VBA.

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

Как правило, чтобы найти символ, который используется как часть шаблона в регулярных выражениях, вам нужно поставить перед ним обратную косую черту. В регулярных выражениях действует как escape-символ, который отменяет «особое» назначение следующего символа и превращает его в обычный символ. Таким образом, чтобы найти квадратную скобку, вы ставите перед ней обратную косую черту: [ для соответствия открывающей скобке и ] для соответствия закрывающей скобке. Между скобками поместите группу символов для поиска. В зависимости от того, какой квантификатор вы используете в группе, будут производиться разные замены.

Жадный шаблон: [(.*)]

Этот шаблон выполняет жадный поиск — захватывает как можно больше знаков. В начале ищем открывающую скобку [. Выражение .* соответствует как можно большему числу символов. Итак, этот шаблон захватывает все от первой открывающей скобки до последней закрывающей скобки ].

Ленивый шаблон: [(.*?)]

Этот шаблон выполняет ленивый поиск — захватывает как можно меньше. Ищем открывающую скобку ]. Знак вопроса ? заставляет .* искать совпадение с как можно меньшим количеством символов, пока не найдется следующее совпадение в шаблоне, то есть закрывающая скобка ]. Таким образом, этот шаблон захватывает все, от первой открывающей скобки до первой закрывающей скобки.

Отрицание: [([^]]*)]

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

Как только вы определились с регулярным выражением, «скормите» его функции замены. Вот как:

  1. На вкладке Ablebits Data в группе Text щелкните Regex Tools .
  2. На панели Regex Tools настройте параметры
  3. Выберите исходные строки.
  4. Введите свой шаблон.
  5. Выберите параметр Replace with (Заменить на) и вставьте замещающий текст в поле.
  6. Чтобы результаты отображались в виде формул, а не значений, установите флажок Insert as a formula (Вставить как формулу) .
  7. Нажмите кнопку Replace (Заменить) .

Чтобы результаты отображались в виде формул, а не значений, установите флажок Insert as a formula (Вставить как формулу) .

Нажмите кнопку Replace (Заменить) .

После этого функция AblebitsRegexReplace вставляется в новый столбец справа от исходных данных.

=AblebitsRegexReplace(A2; «[(.*)]»; «*»)

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

Советы и примечания:

  • Функция AblebitsRegexReplace находит и заменяет все совпадения.
  • Функцию можно вставить непосредственно в ячейку через стандартное диалоговое окно «Вставить функцию», где она относится к категории AblebitsUDFs .

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

Содержание

  1. ПОИСК, ПОИСКБ (функции ПОИСК, ПОИСКБ)
  2. Описание
  3. Синтаксис
  4. Замечание
  5. Примеры
  6. Сравнение текста с шаблоном в Excel
  7. Описание функции
  8. Пример 1
  9. Пример 2
  10. Пример 3
  11. Пример 4
  12. Пример 5
  13. Пример 6
  14. Пример 7
  15. Excel поиск по шаблону
  16. Что возвращает функция
  17. Синтаксис
  18. Аргументы функции
  19. Дополнительная информация
  20. Примеры использования функции ПОИСК в Excel
  21. Пример 1. Ищем слово внутри текстовой строки (с начала)
  22. Пример 2. Ищем слово внутри текстовой строки (с указанием стартовой позиции поиска)
  23. Пример 3. Поиск слова при наличии нескольких совпадений в тексте
  24. Пример 4. Используем подстановочные знаки при работе функции ПОИСК в Excel
  25. Примеры использования функции ПОИСК в Excel
  26. Пример использования функции ПОИСК и ПСТР
  27. Пример формулы ПОИСК и ЗАМЕНИТЬ
  28. Чем отличается функция ПОИСК от функции НАЙТИ в Excel?
  29. Описание
  30. Синтаксис
  31. Замечание
  32. Примеры

ПОИСК, ПОИСКБ (функции ПОИСК, ПОИСКБ)

В этой статье описаны синтаксис формулы и использование функций ПОИСК и ПОИСКБ в Microsoft Excel.

Описание

Функции ПОИСК И ПОИСКБ находят одну текстовую строку в другой и возвращают начальную позицию первой текстовой строки (считая от первого символа второй текстовой строки). Например, чтобы найти позицию буквы «n» в слове «printer», можно использовать следующую функцию:

Эта функция возвращает 4, так как «н» является четвертым символом в слове «принтер».

Можно также находить слова в других словах. Например, функция

возвращает 5, так как слово «base» начинается с пятого символа слова «database». Можно использовать функции ПОИСК и ПОИСКБ для определения положения символа или текстовой строки в другой текстовой строке, а затем вернуть текст с помощью функций ПСТР и ПСТРБ или заменить его с помощью функций ЗАМЕНИТЬ и ЗАМЕНИТЬБ. Эти функции показаны в примере 1 данной статьи.

Эти функции могут быть доступны не на всех языках.

Функция ПОИСКБ отсчитывает по два байта на каждый символ, только если языком по умолчанию является язык с поддержкой БДЦС. В противном случае функция ПОИСКБ работает так же, как функция ПОИСК, и отсчитывает по одному байту на каждый символ.

К языкам, поддерживающим БДЦС, относятся японский, китайский (упрощенное письмо), китайский (традиционное письмо) и корейский.

Синтаксис

Аргументы функций ПОИСК и ПОИСКБ описаны ниже.

Искомый_текст Обязательный. Текст, который требуется найти.

Просматриваемый_текст Обязательный. Текст, в котором нужно найти значение аргумента искомый_текст.

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

Замечание

Функции ПОИСК и ПОИСКБ не учитывают регистр. Если требуется учитывать регистр, используйте функции НАЙТИ и НАЙТИБ.

В аргументе искомый_текст можно использовать подстановочные знаки: вопросительный знак ( ?) и звездочку ( *). Вопросительный знак соответствует любому знаку, звездочка — любой последовательности знаков. Если требуется найти вопросительный знак или звездочку, введите перед ним тильду (

Если значение find_text не найдено, #VALUE! возвращается значение ошибки.

Если аргумент начальная_позиция опущен, то он полагается равным 1.

Если start_num больше нуля или больше, чем длина аргумента within_text, #VALUE! возвращается значение ошибки.

Аргумент начальная_позиция можно использовать, чтобы пропустить определенное количество знаков. Допустим, что функцию ПОИСК нужно использовать для работы с текстовой строкой «МДС0093.МужскаяОдежда». Чтобы найти первое вхождение «М» в описательной части текстовой строки, задайте для аргумента начальная_позиция значение 8, чтобы поиск не выполнялся в той части текста, которая является серийным номером (в данном случае — «МДС0093»). Функция ПОИСК начинает поиск с восьмого символа, находит знак, указанный в аргументе искомый_текст, в следующей позиции, и возвращает число 9. Функция ПОИСК всегда возвращает номер знака, считая от начала просматриваемого текста, включая символы, которые пропускаются, если значение аргумента начальная_позиция больше 1.

Примеры

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

Источник

Сравнение текста с шаблоном в Excel

Описание функции

Функция =ТЕКСТКАК(ТЕКСТ, ШАБЛОН) имеет два обязательных аргумента:

  • ТЕКСТ — строка в которой необходимо произвести сравнение по заданному шаблону.
  • ШАБЛОН, задающий сравнение текста. В шаблоне можно применять специальные обозначения:
  1. ? — Любой отдельный знак.
  2. * — Ноль или больше знаков.
  3. # — Любая отдельная цифра.
  4. [ ] — Любой отдельный знак из скобок.
  5. [! ] — Любой отдельный знак отсутствующий в скобках

Теперь к практике. Далее привожу множество примеров использования данной функции.

Пример 1

Как найти фамилии, заканчивающиеся на букву «а»?

Решением является формула =ТЕКСТКАК(ТЕКСТ;»*а»), где символ * указывает на неограниченное количество букв и символов перед последней буквой а.

Пример 2

Как привести телефонный справочник в порядок.

Используем формулу =ТЕКСТКАК(ТЕКСТ;»+# ### ###-##-##»), где знак # обозначает, что на этом месте может быть расположена любая цифра.

Пример 3

Найти слова которые содержат сочетание «сто» в любой части слова

Пример 4

Найти слова которые содержат сочетание «раст» или «рост» в любой части слова

Пример 5

Найти слова которые содержат любое сочетание кроме «раст»

Пример 6

Найти текст, который начинается с цифры

Пример 7

Проверка правильности введенного email. Сразу оговорюсь, проверка email в данном случае не полноценная, написана для в качестве примера, объясняющего принцип работы.

Источник

Excel поиск по шаблону

Функция ПОИСК (SEARCH) в Excel используется для определения расположения текста внутри какого-либо текста и указания его точной позиции.

Что возвращает функция

Функция возвращает числовое значение, обозначающее стартовую позицию искомого текста внутри другого текста. Позиция обозначает порядковый номер символа, с которого начинается искомый текст.

Синтаксис

=SEARCH(find_text, within_text, [start_num]) – английская версия

=ПОИСК(искомый_текст;просматриваемый_текст;[начальная_позиция]) – русская версия

Аргументы функции

  • find_text (искомый_текст) – текст или текстовая строка которую вы хотите найти;
  • within_text (просматриваемый_текст) – текст, внутри которого вы осуществляете поиск;
  • [start_num] ([начальная_позиция]) – числовое значение, обозначающее позицию, с которой вы хотите начать поиск. Если не указать этот аргумент, то функци начнет поиск с начала текста.

Дополнительная информация

  • Если стартовая позиция поиска не указана, то поиск текста осуществляется сначала текста;
  • Функция не чувствительна к регистру. Если вам нужна чувствительность к регистру, то используйте функцию НАЙТИ;
  • Функция может обрабатывать подстановочные знаки. В Excel существует три подстановочных знака – ?, *,
  • знак “?” – сопоставляет любой одиночный символ;
  • знак “*” – сопоставляет любые дополнительные символы;
  • знак “

” – используется, если нужно найти сам вопросительный знак или звездочку.

Функция возвращает ошибку, в случае если искомый текст не найден.

Примеры использования функции ПОИСК в Excel

Пример 1. Ищем слово внутри текстовой строки (с начала)

На примере выше видно, что когда мы ищем слово “доброе” в тексте “Доброе утро”, функция возвращает значение “1”, что соответствует позиции слова “доброе” в тексте “Доброе утро”.

Так как функция не чувствительна к регистру, нет разницы каким образом мы указываем искомое слово “доброе”, будь то “ДОБРОЕ”, “Доброе”, “дОброе” и.т.д. функция вернет одно и то же значение.

Если вам необходимо осуществить поиск чувствительный к регистру – используйте функцию НАЙТИ в Excel.

Пример 2. Ищем слово внутри текстовой строки (с указанием стартовой позиции поиска)

Третий аргумент функции указывает на порядковый номер позиции внутри текста, с которой будет осуществлен поиск. На примере выше, функция возвращает значение “1” при поиске слова “доброе” в тексте “Доброе утро”, начиная свой поиск с первой позиции.

Вместе с тем, если мы указываем функции, что поиск следует начинать со второго символа текста “Доброе утро”, то есть функция в этом случае видит текст как “оброе утро” и ищет слово “доброе”, то результатом будет ошибка.

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

Пример 3. Поиск слова при наличии нескольких совпадений в тексте

Функция начинает искать текст со стартовой позиции которую мы можем указать в качестве аргумента, или она начнет поиск с начала текста автоматически. На примере выше, мы ищем слово “доброе ” в тексте “Доброе доброе утро” со стартовой позицией для поиска “1”. В этом случае функция возвращает “1”, так как первое найденное слово “Доброе” начинается с первого символа текста.

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

Пример 4. Используем подстановочные знаки при работе функции ПОИСК в Excel

При поиске функция учитывает подстановочные знаки. На примере выше мы ищем текст “c*l”. Наличие подстановочного знака “*” в данном запросе обозначает что мы ищем любо слово, которое начинается с буквы “c” и заканчивается буквой “l”, а что между этими двумя буквами не важно. Как результат, функция возвращает значение “3”, так как в слове “Excel”, расположенном в ячейке А2 буква “c” находится на третьей позиции.

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

Примеры использования функции ПОИСК в Excel

Для нахождения позиции текстовой строки в другой аналогичной применяют ПОИСК и ПОИСКБ. Расчет ведется с первого символа анализируемой ячейки. Так, если задать функцию ПОИСК “л” для слова «апельсин» мы получим значение 4, так как именно такой по счету выступает заданная буква в текстовом выражении.

Функция ПОИСК работает не только для поиска позиции отдельных букв в тексте, но и для целой комбинации. Например, задав данную команду для слов «book», «notebook», мы получим значение 5, так как именно с этого по счету символа начинается искомое слово «book».

Используют функцию ПОИСК наряду с такими, как:

  • НАЙТИ (осуществляет поиск с учетом регистра);
  • ПСТР (возвращает текст);
  • ЗАМЕНИТЬ (заменяет символы).

Важно помнить, что рассматриваемая команда ПОИСК не учитывает регистра. Если мы с помощью нее станем искать положение буквы «а» в слове «Александр», в ячейке появится выражение 1, так как это первый символ в анализируемой информации. При задании команды НАЙТИ «а» в том же отрезке текста, мы получим значение 6, так как именно 6 позицию занимает строчная «а» в слове «Александр».

Кроме того, функция ПОИСК работает не для всех языков. От команды ПОИСКБ она отличается тем, что на каждый символ отсчитывает по 1 байту, в то время как ПОИСКБ — по два.

Чтобы воспользоваться функцией, необходимо ввести следующую формулу:

В этой формуле задаваемые значения определяются следующим образом.

  1. Искомый текст. Это числовая и буквенная комбинация, позицию которой требуется найти.
  2. Анализируемый текст. Это тот фрагмент текстовой информации, из которого требуется вычленить искомую букву или сочетание и вернуть позицию.
  3. Начальная позиция. Данный фрагмент необязателен для ввода. Но, если вы желаете найти, к примеру, букву «а» в строке со значением «А015487.Мужская одежда», то необходимо указать в конце формулы 8, чтобы анализ этого фрагмента проводился с восьмой позиции, то есть после артикула. Если этот аргумент не указан, то он по умолчанию считается равным 1. При указании начальной позиции положение искомого фрагмента все равно будет считаться с первого символа, даже если начальные 8 были пропущены в анализе. То есть в рассматриваемом примере букве «а» в строке «А015487.Мужская одежда» будет присвоено значение 14.

При работе с аргументом «искомый_текст» можно использовать следующие подстановочные знаки.

  1. Вопросительный знак (?). Он будет соответствовать любому знаку.
  2. Звездочка (*). Этот символ будет соответствовать любой комбинации знаков.

Если же требуется найти подобные символы в строке, то в аргументе «искомый_текст» перед ними нужно поставить тильду (

Если искомый текст не был найден приложением или начальная позиция установлена меньше 0, больше общего количества присутствующих символов, в ячейке отобразиться ошибка #ЗНАЧ.

Если «искомый_текст» не найден, возвращается значение ошибки #ЗНАЧ.

Пример использования функции ПОИСК и ПСТР

Пример 1. Есть набор текстовой информации с контактными данными клиентов и их именами. Информация записана в разных форматах. Необходимо найти, с какого символа начинается номер телефона.

Введем исходные данные в таблицу:

В ячейке, которая будет учитывать данные клиентов без телефона, введем следующую формулу:

Нажмем Enter для отображения искомой информации:

Далее мы можем использовать любые другие функции для отображения представленной информации в удобном формате:

На рисунке видно, как с помощью формулы из двух функций ПСТР и ПОИСК мы вырезаем фрагмент текста из строк разной длины. Притом разделяем текстовый фрагмент в нужном месте так, чтобы отделить ее от номера телефона.

Пример формулы ПОИСК и ЗАМЕНИТЬ

Пример 2. Есть таблица с текстовой информацией, в которой слово «маржа» нужно заменить на «объем».

Откроем книгу Excel с обрабатываемыми данными. Пропишем формулу для поиска нужного слова «маржа»:

Теперь дополним формулу функцией ЗАМЕНИТЬ:

Чем отличается функция ПОИСК от функции НАЙТИ в Excel?

Функция ПОИСК очень схожа с функцией НАЙТИ по принципу действия. Более того у них фактически одинаковые аргументы. Только лишь названия аргументов отличаются, а по сути и типам значений – одинаковые:

Но опытный пользователь Excel знает, что отличие у этих двух функций очень существенные.

Отличие №1. Чувствительность к верхнему и нижнему регистру (большие и маленькие буквы). Функция НАЙТИ чувствительна к регистру символов. Например, есть список номенклатурных единиц с артикулом. Необходимо найти позицию маленькой буквы «о».

Теперь смотрите как ведут себя по-разному эти две функции при поиске большой буквы «О» в критериях поиска:

Отличие №2. В первом аргументе «Искомый_текст» для функции ПОИСК мы можем использовать символы подстановки для указания не точного, а приблизительного значения, которое должно содержаться в исходной текстовой строке. Вторая функция НАЙТИ не умеет использовать в работе символы подстановки масок текста: «*»; «?»; «

Для примера попробуем в этих же исходных строках столбца «наименования» найти приблизительный текст. Для этого укажем следующий вид критерия поиска используя символы подстановки: «н*ая».

Как видим во втором отличии функция НАЙТИ совершенно не умеет работать и распознавать спецсимволы для подстановки текста в критериях поиска при неточном совпадении в исходной строке.

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

В этой статье описаны синтаксис формулы и использование функций ПОИСК и ПОИСКБ в Microsoft Excel.

Описание

Функции ПОИСК И ПОИСКБ находят одну текстовую строку в другой и возвращают начальную позицию первой текстовой строки (считая от первого символа второй текстовой строки). Например, чтобы найти позицию буквы «n» в слове «printer», можно использовать следующую функцию:

Эта функция возвращает 4, так как «н» является четвертым символом в слове «принтер».

Можно также находить слова в других словах. Например, функция

возвращает 5, так как слово «base» начинается с пятого символа слова «database». Можно использовать функции ПОИСК и ПОИСКБ для определения положения символа или текстовой строки в другой текстовой строке, а затем вернуть текст с помощью функций ПСТР и ПСТРБ или заменить его с помощью функций ЗАМЕНИТЬ и ЗАМЕНИТЬБ. Эти функции показаны в примере 1 данной статьи.

Эти функции могут быть доступны не на всех языках.

Функция ПОИСКБ отсчитывает по два байта на каждый символ, только если языком по умолчанию является язык с поддержкой БДЦС. В противном случае функция ПОИСКБ работает так же, как функция ПОИСК, и отсчитывает по одному байту на каждый символ.

К языкам, поддерживающим БДЦС, относятся японский, китайский (упрощенное письмо), китайский (традиционное письмо) и корейский.

Синтаксис

Аргументы функций ПОИСК и ПОИСКБ описаны ниже.

Искомый_текст Обязательный. Текст, который требуется найти.

Просматриваемый_текст Обязательный. Текст, в котором нужно найти значение аргумента искомый_текст.

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

Замечание

Функции ПОИСК и ПОИСКБ не учитывают регистр. Если требуется учитывать регистр, используйте функции НАЙТИ и НАЙТИБ.

В аргументе искомый_текст можно использовать подстановочные знаки: вопросительный знак ( ?) и звездочку ( *). Вопросительный знак соответствует любому знаку, звездочка — любой последовательности знаков. Если требуется найти вопросительный знак или звездочку, введите перед ним тильду (

Если значение аргумента искомый_текст не найдено, #VALUE! возвращено значение ошибки.

Если аргумент начальная_позиция опущен, то он полагается равным 1.

Если Нач_позиция не больше 0 или больше, чем длина аргумента просматриваемый_текст , #VALUE! возвращено значение ошибки.

Аргумент начальная_позиция можно использовать, чтобы пропустить определенное количество знаков. Допустим, что функцию ПОИСК нужно использовать для работы с текстовой строкой «МДС0093.МужскаяОдежда». Чтобы найти первое вхождение «М» в описательной части текстовой строки, задайте для аргумента начальная_позиция значение 8, чтобы поиск не выполнялся в той части текста, которая является серийным номером (в данном случае — «МДС0093»). Функция ПОИСК начинает поиск с восьмого символа, находит знак, указанный в аргументе искомый_текст, в следующей позиции, и возвращает число 9. Функция ПОИСК всегда возвращает номер знака, считая от начала просматриваемого текста, включая символы, которые пропускаются, если значение аргумента начальная_позиция больше 1.

Примеры

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

Источник

You can use text functions to manipulate text strings in Excel. However, you can’t use them with regular expressions. As of writing this article VBA is your only option. In this guide, we’re going to show you how to use regular expressions in Excel.

Download Workbook

What is a regular expression?

A regular expression (also known as regex or regexp shortly) is a special text string for specifying a search pattern. They are like wildcards. Instead of specifying the number of characters, you can create patterns to find a specific group of characters, like searching between «b» to «o», using OR logic, excluding some characters, or repeating values.

Regular expressions are commonly used for text parsing and replacing operations for all programming languages. To use regular expressions in Excel, we will be using VBA.

Pattern Description Samples
^jack begins with «jack» jack-of-all-trades, jack’s house
jack$ ends with «jack» hijack
^jack$ is exactly «jack» jack
colo[u]{0,}r can include «u» at least 0 times colour, color (not colur)
col[o|u]r includes either «o» or «u» color, colur (not colour)
col[^u]r accepts any character except «u» color (not colur or colour)

How to use regular expressions

Let’s start using regular expressions in Excel by opening VBA. Press Alt + F11 keys to open VBA (Visual Basic for Applications) window. Add a module to enter your code.

Next step is to add regular expression reference to VBA. Click Tools > References in the VBA toolbar. Find and check Microsoft VBScript Regular Expressions 5.5 item in the References window. Click OK to add the reference.

How to use regular expressions in Excel 02

Using the VBScript reference, we can create a regular expression object, which is defined as RegExp in VBA. A RegExp object has 4 properties and 3 methods:

Properties

Name Type Description
Global Boolean Set True to find all cases that match with the pattern.
Set False to find the first match.
IgnoreCase Boolean Set True to not make case-sensitive search.
Set False to make case-sensitive search.
Multiline Boolean Set True if your string has multiple lines and you want to perform the search in all lines.
Pattern String The regular expression pattern you want to search.

Methods

Name Arguments Description
Execute sourceString As String Returns an array that contains all occurrences of the pattern matched in the string.
Replace sourceString As String replaceVar As Variant Returns a string which all occurrences of the pattern in the string are replaced with the replaceVar string.
Test sourceString As String Returns True if there is a match. Otherwise, False.

Code Samples

A function that returns TRUE/FALSE if the pattern is found in a string

Public Function RegExFind(str As String, pat As String) As Boolean

‘Define the regular expression object

Dim RegEx As New RegExp

‘Set up regular expression properties

With RegEx

.Global = False ‘All occurences are not necessary since a single occurence is enough

.IgnoreCase = True ‘No case-sensitivty

.MultiLine = True ‘Check all lines

.Pattern = pat ‘pattern

End With

RegExFind = RegEx.Test(str)

End Function

How to use regular expressions in Excel 04

After writing the code, you can use this function as a regular Excel function.

A function that replaces the pattern with a given string

Public Function RegExReplace(str As String, pat As String, replaceStr As String) As String

‘Define the regular expression object

Dim RegEx As New RegExp

‘Set up regular expression properties

With RegEx

.Global = False ‘All occurences are not necessary since a single occurence is enough

.IgnoreCase = True ‘No case-sensitivty

.MultiLine = True ‘Check all lines

.Pattern = pat ‘pattern

End With

RegExReplace = RegEx.Replace(str, replaceStr) ‘Return the modified string with replacement value

End Function

How to use regular expressions in Excel 06

The following sample shows how to replace strings that start with «col», continue with 0 or 1 occurrences of «o» and single «u», and finally ends with an «r» character with «Color» string.

Функция ПОИСК (SEARCH) в Excel используется для определения расположения текста внутри какого-либо текста и указания его точной позиции.

Что возвращает функция

Функция возвращает числовое значение, обозначающее стартовую позицию искомого текста внутри другого текста. Позиция обозначает порядковый номер символа, с которого начинается искомый текст.

Синтаксис

=SEARCH(find_text, within_text, [start_num]) – английская версия

=ПОИСК(искомый_текст;просматриваемый_текст;[начальная_позиция]) – русская версия

Аргументы функции

  • find_text (искомый_текст) – текст или текстовая строка которую вы хотите найти;
  • within_text (просматриваемый_текст) – текст, внутри которого вы осуществляете поиск;
  • [start_num] ([начальная_позиция]) – числовое значение, обозначающее позицию, с которой вы хотите начать поиск. Если не указать этот аргумент, то функци начнет поиск с начала текста.

Дополнительная информация

  • Если стартовая позиция поиска не указана, то поиск текста осуществляется сначала текста;
  • Функция не чувствительна к регистру. Если вам нужна чувствительность к регистру, то используйте функцию НАЙТИ;
  • Функция может обрабатывать подстановочные знаки. В Excel существует три подстановочных знака – ?, *,

.

  • знак “?” – сопоставляет любой одиночный символ;
  • знак “*” – сопоставляет любые дополнительные символы;
  • знак “

” – используется, если нужно найти сам вопросительный знак или звездочку.

  • Функция возвращает ошибку, в случае если искомый текст не найден.
  • Пример 1. Ищем слово внутри текстовой строки (с начала)

    На примере выше видно, что когда мы ищем слово “доброе” в тексте “Доброе утро”, функция возвращает значение “1”, что соответствует позиции слова “доброе” в тексте “Доброе утро”.

    Так как функция не чувствительна к регистру, нет разницы каким образом мы указываем искомое слово “доброе”, будь то “ДОБРОЕ”, “Доброе”, “дОброе” и.т.д. функция вернет одно и то же значение.

    Если вам необходимо осуществить поиск чувствительный к регистру – используйте функцию НАЙТИ в Excel.

    Пример 2. Ищем слово внутри текстовой строки (с указанием стартовой позиции поиска)

    Третий аргумент функции указывает на порядковый номер позиции внутри текста, с которой будет осуществлен поиск. На примере выше, функция возвращает значение “1” при поиске слова “доброе” в тексте “Доброе утро”, начиная свой поиск с первой позиции.

    Вместе с тем, если мы указываем функции, что поиск следует начинать со второго символа текста “Доброе утро”, то есть функция в этом случае видит текст как “оброе утро” и ищет слово “доброе”, то результатом будет ошибка.

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

    Пример 3. Поиск слова при наличии нескольких совпадений в тексте

    Функция начинает искать текст со стартовой позиции которую мы можем указать в качестве аргумента, или она начнет поиск с начала текста автоматически. На примере выше, мы ищем слово “доброе ” в тексте “Доброе доброе утро” со стартовой позицией для поиска “1”. В этом случае функция возвращает “1”, так как первое найденное слово “Доброе” начинается с первого символа текста.

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

    Пример 4. Используем подстановочные знаки при работе функции ПОИСК в Excel

    При поиске функция учитывает подстановочные знаки. На примере выше мы ищем текст “c*l”. Наличие подстановочного знака “*” в данном запросе обозначает что мы ищем любо слово, которое начинается с буквы “c” и заканчивается буквой “l”, а что между этими двумя буквами не важно. Как результат, функция возвращает значение “3”, так как в слове “Excel”, расположенном в ячейке А2 буква “c” находится на третьей позиции.

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

    Примеры использования функции ПОИСК в Excel

    Для нахождения позиции текстовой строки в другой аналогичной применяют ПОИСК и ПОИСКБ. Расчет ведется с первого символа анализируемой ячейки. Так, если задать функцию ПОИСК “л” для слова «апельсин» мы получим значение 4, так как именно такой по счету выступает заданная буква в текстовом выражении.

    Функция ПОИСК работает не только для поиска позиции отдельных букв в тексте, но и для целой комбинации. Например, задав данную команду для слов «book», «notebook», мы получим значение 5, так как именно с этого по счету символа начинается искомое слово «book».

    Используют функцию ПОИСК наряду с такими, как:

    • НАЙТИ (осуществляет поиск с учетом регистра);
    • ПСТР (возвращает текст);
    • ЗАМЕНИТЬ (заменяет символы).

    Важно помнить, что рассматриваемая команда ПОИСК не учитывает регистра. Если мы с помощью нее станем искать положение буквы «а» в слове «Александр», в ячейке появится выражение 1, так как это первый символ в анализируемой информации. При задании команды НАЙТИ «а» в том же отрезке текста, мы получим значение 6, так как именно 6 позицию занимает строчная «а» в слове «Александр».

    Кроме того, функция ПОИСК работает не для всех языков. От команды ПОИСКБ она отличается тем, что на каждый символ отсчитывает по 1 байту, в то время как ПОИСКБ — по два.

    Чтобы воспользоваться функцией, необходимо ввести следующую формулу:

    В этой формуле задаваемые значения определяются следующим образом.

    1. Искомый текст. Это числовая и буквенная комбинация, позицию которой требуется найти.
    2. Анализируемый текст. Это тот фрагмент текстовой информации, из которого требуется вычленить искомую букву или сочетание и вернуть позицию.
    3. Начальная позиция. Данный фрагмент необязателен для ввода. Но, если вы желаете найти, к примеру, букву «а» в строке со значением «А015487.Мужская одежда», то необходимо указать в конце формулы 8, чтобы анализ этого фрагмента проводился с восьмой позиции, то есть после артикула. Если этот аргумент не указан, то он по умолчанию считается равным 1. При указании начальной позиции положение искомого фрагмента все равно будет считаться с первого символа, даже если начальные 8 были пропущены в анализе. То есть в рассматриваемом примере букве «а» в строке «А015487.Мужская одежда» будет присвоено значение 14.

    При работе с аргументом «искомый_текст» можно использовать следующие подстановочные знаки.

    1. Вопросительный знак (?). Он будет соответствовать любому знаку.
    2. Звездочка (*). Этот символ будет соответствовать любой комбинации знаков.

    Если же требуется найти подобные символы в строке, то в аргументе «искомый_текст» перед ними нужно поставить тильду (

    Если искомый текст не был найден приложением или начальная позиция установлена меньше 0, больше общего количества присутствующих символов, в ячейке отобразиться ошибка #ЗНАЧ.

    Если «искомый_текст» не найден, возвращается значение ошибки #ЗНАЧ.

    Пример использования функции ПОИСК и ПСТР

    Пример 1. Есть набор текстовой информации с контактными данными клиентов и их именами. Информация записана в разных форматах. Необходимо найти, с какого символа начинается номер телефона.

    Введем исходные данные в таблицу:

    В ячейке, которая будет учитывать данные клиентов без телефона, введем следующую формулу:

    Нажмем Enter для отображения искомой информации:

    Далее мы можем использовать любые другие функции для отображения представленной информации в удобном формате:

    На рисунке видно, как с помощью формулы из двух функций ПСТР и ПОИСК мы вырезаем фрагмент текста из строк разной длины. Притом разделяем текстовый фрагмент в нужном месте так, чтобы отделить ее от номера телефона.

    Пример формулы ПОИСК и ЗАМЕНИТЬ

    Пример 2. Есть таблица с текстовой информацией, в которой слово «маржа» нужно заменить на «объем».

    Откроем книгу Excel с обрабатываемыми данными. Пропишем формулу для поиска нужного слова «маржа»:

    Теперь дополним формулу функцией ЗАМЕНИТЬ:

    Чем отличается функция ПОИСК от функции НАЙТИ в Excel?

    Функция ПОИСК очень схожа с функцией НАЙТИ по принципу действия. Более того у них фактически одинаковые аргументы. Только лишь названия аргументов отличаются, а по сути и типам значений – одинаковые:

    Но опытный пользователь Excel знает, что отличие у этих двух функций очень существенные.

    Отличие №1. Чувствительность к верхнему и нижнему регистру (большие и маленькие буквы). Функция НАЙТИ чувствительна к регистру символов. Например, есть список номенклатурных единиц с артикулом. Необходимо найти позицию маленькой буквы «о».

    Теперь смотрите как ведут себя по-разному эти две функции при поиске большой буквы «О» в критериях поиска:

    Отличие №2. В первом аргументе «Искомый_текст» для функции ПОИСК мы можем использовать символы подстановки для указания не точного, а приблизительного значения, которое должно содержаться в исходной текстовой строке. Вторая функция НАЙТИ не умеет использовать в работе символы подстановки масок текста: «*»; «?»; «

    Для примера попробуем в этих же исходных строках столбца «наименования» найти приблизительный текст. Для этого укажем следующий вид критерия поиска используя символы подстановки: «н*ая».

    Как видим во втором отличии функция НАЙТИ совершенно не умеет работать и распознавать спецсимволы для подстановки текста в критериях поиска при неточном совпадении в исходной строке.

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

    В этой статье описаны синтаксис формулы и использование функций ПОИСК и ПОИСКБ в Microsoft Excel.

    Описание

    Функции ПОИСК И ПОИСКБ находят одну текстовую строку в другой и возвращают начальную позицию первой текстовой строки (считая от первого символа второй текстовой строки). Например, чтобы найти позицию буквы «n» в слове «printer», можно использовать следующую функцию:

    Эта функция возвращает 4, так как «н» является четвертым символом в слове «принтер».

    Можно также находить слова в других словах. Например, функция

    возвращает 5, так как слово «base» начинается с пятого символа слова «database». Можно использовать функции ПОИСК и ПОИСКБ для определения положения символа или текстовой строки в другой текстовой строке, а затем вернуть текст с помощью функций ПСТР и ПСТРБ или заменить его с помощью функций ЗАМЕНИТЬ и ЗАМЕНИТЬБ. Эти функции показаны в примере 1 данной статьи.

    Эти функции могут быть доступны не на всех языках.

    Функция ПОИСКБ отсчитывает по два байта на каждый символ, только если языком по умолчанию является язык с поддержкой БДЦС. В противном случае функция ПОИСКБ работает так же, как функция ПОИСК, и отсчитывает по одному байту на каждый символ.

    К языкам, поддерживающим БДЦС, относятся японский, китайский (упрощенное письмо), китайский (традиционное письмо) и корейский.

    Синтаксис

    Аргументы функций ПОИСК и ПОИСКБ описаны ниже.

    Искомый_текст Обязательный. Текст, который требуется найти.

    Просматриваемый_текст Обязательный. Текст, в котором нужно найти значение аргумента искомый_текст.

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

    Замечание

    Функции ПОИСК и ПОИСКБ не учитывают регистр. Если требуется учитывать регистр, используйте функции НАЙТИ и НАЙТИБ.

    В аргументе искомый_текст можно использовать подстановочные знаки: вопросительный знак ( ?) и звездочку ( *). Вопросительный знак соответствует любому знаку, звездочка — любой последовательности знаков. Если требуется найти вопросительный знак или звездочку, введите перед ним тильду (

    Если значение аргумента искомый_текст не найдено, #VALUE! возвращено значение ошибки.

    Если аргумент начальная_позиция опущен, то он полагается равным 1.

    Если Нач_позиция не больше 0 или больше, чем длина аргумента просматриваемый_текст , #VALUE! возвращено значение ошибки.

    Аргумент начальная_позиция можно использовать, чтобы пропустить определенное количество знаков. Допустим, что функцию ПОИСК нужно использовать для работы с текстовой строкой «МДС0093.МужскаяОдежда». Чтобы найти первое вхождение «М» в описательной части текстовой строки, задайте для аргумента начальная_позиция значение 8, чтобы поиск не выполнялся в той части текста, которая является серийным номером (в данном случае — «МДС0093»). Функция ПОИСК начинает поиск с восьмого символа, находит знак, указанный в аргументе искомый_текст, в следующей позиции, и возвращает число 9. Функция ПОИСК всегда возвращает номер знака, считая от начала просматриваемого текста, включая символы, которые пропускаются, если значение аргумента начальная_позиция больше 1.

    Примеры

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

    Понравилась статья? Поделить с друзьями:
  • Поиск текста в файлах word программа
  • Поиск текста в тексте excel
  • Поиск текста в столбце excel формула
  • Поиск текста в списке excel
  • Поиск текста в нескольких документах word