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)
  • Поиск и подсветка символов латиницы в русском тексте
  • Поиск ближайшего похожего текста (Иванов = Ивонов = Иваноф и т.д.)

Для удобства работы с текстом в Excel существуют текстовые функции. Они облегчают обработку сразу сотен строк. Рассмотрим некоторые из них на примерах.

Примеры функции ТЕКСТ в Excel

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

Самая полезная возможность функции ТЕКСТ – форматирование числовых данных для объединения с текстовыми данными. Без использования функции Excel «не понимает», как показывать числа, и преобразует их в базовый формат.

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

Выручка.

Использование амперсанда без функции ТЕКСТ дает «неадекватный» результат:

Плохой пример.

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

ТЕКСТ.

Формула «для даты» теперь выглядит так:

Второй аргумент функции – формат. Где брать строку формата? Щелкаем правой кнопкой мыши по ячейке со значением. Нажимаем «Формат ячеек». В открывшемся окне выбираем «все форматы». Копируем нужный в строке «Тип». Вставляем скопированное значение в формулу.

Формат ячеек.

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

Числа.

Если нужно вернуть прежние числовые значения (без нулей), то используем оператор «—»:

Оператор 2 минуса.

Обратите внимание, что значения теперь отображаются в числовом формате.



Функция разделения текста в Excel

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

  • ЛЕВСИМВ (текст; кол-во знаков) – отображает заданное число знаков с начала ячейки;
  • ПРАВСИМВ (текст; кол-во знаков) – возвращает заданное количество знаков с конца ячейки;
  • ПОИСК (искомый текст; диапазон для поиска; начальная позиция) – показывает позицию первого появления искомого знака или строки при просмотре слева направо

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

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

ФИО.

В первой строке есть только имя и фамилия, разделенные пробелом. Формула для извлечения имени: =ЛЕВСИМВ(A2;ПОИСК(» «;A2;1)). Для определения второго аргумента функции ЛЕВСИМВ – количества знаков – используется функция ПОИСК. Она находит пробел в ячейке А2, начиная слева.

Формула для извлечения фамилии:

ПРАВСИМВ.

С помощью функции ПОИСК Excel определяет количество знаков для функции ПРАВСИМВ. Функция ДЛСТР «считает» общую длину текста. Затем отнимается количество знаков до первого пробела (найденное ПОИСКом).

Вторая строка содержит имя, отчество и фамилию. Для имени используем такую же формулу:

ЛЕВСИМВ.

Формула для извлечения фамилии несколько иная: Это пять знаков справа. Вложенные функции ПОИСК ищут второй и третий пробелы в строке. ПОИСК(» «;A3;1) находит первый пробел слева (перед отчеством). К найденному результату добавляем единицу (+1). Получаем ту позицию, с которой будем искать второй пробел.

Часть формулы – ПОИСК(» «;A3;ПОИСК(» «;A3;1)+1) – находит второй пробел. Это будет конечная позиция отчества.

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

Формула «для отчества» строится по тем же принципам:

ПСТР.

Функция объединения текста в Excel

Для объединения значений из нескольких ячеек в одну строку используется оператор амперсанд (&) или функция СЦЕПИТЬ.

Например, значения расположены в разных столбцах (ячейках):

ФИО 2.

Ставим курсор в ячейку, где будут находиться объединенные три значения. Вводим равно. Выбираем первую ячейку с текстом и нажимаем на клавиатуре &. Затем – знак пробела, заключенный в кавычки (“ “). Снова — &. И так последовательно соединяем ячейки с текстом и пробелы.

Получаем в одной ячейке объединенные значения:

Объединение.

Использование функции СЦЕПИТЬ:

СЦЕПИТЬ.

С помощью кавычек в формуле можно добавить в конечное выражение любой знак или текст.

Функция ПОИСК текста в Excel

Функция ПОИСК возвращает начальную позицию искомого текста (без учета регистра). Например:

СЦЕПИТЬ.

Функция ПОИСК вернула позицию 10, т.к. слово «Захар» начинается с десятого символа в строке. Где это может пригодиться?

Функция ПОИСК определяет положение знака в текстовой строке. А функция ПСТР возвращает текстовые значения (см. пример выше). Либо можно заменить найденный текст посредством функции ЗАМЕНИТЬ.

Скачать пример функции для работы с текстом в Excel

Читайте так же: как перевести число и сумму прописью.

Синтаксис функции ПОИСК:

  • «искомый текст» — что нужно найти;
  • «просматриваемый текст» — где искать;
  • «начальная позиция» — с какой позиции начинать искать (по умолчанию – 1).

Если нужно учитывать регистр, используется функция НАЙТИ.

Text analysis is a machine learning technique used to automatically extract valuable insights from unstructured text data. Companies use text analysis tools to quickly digest online data and documents, and transform them into actionable insights. We can use text analysis to extract specific information like keywords, names, or company-oriented information from thousands of details, or categorize survey responses by analyzing the text.

Automated Text Analysis in Excel

AI in Excel can be used for automated text analysis by utilizing its built-in functions, macros, and add-ins that allow you to automate repetitive tasks and perform advanced text analysis.

Example

Good service: I ordered a brand new laptop from online store. It’s really a awesome product with good condition.

Thank you for this wonderful service.

Some Text Analysis Techniques:

  • Text classification
  • Text extraction
  • Word Frequency
  • Clustering

Steps to be followed in Excel for Automated Text Analysis

Step 1: Open the Excel spreadsheet and proceed with Azure machine learning add-ins. Add-ins such as text analytics for excel provide advanced text analysis capabilities such as sentiment analysis, key phrase extraction, and language detection. These can be used to automatically extract insights from large amounts of text data, such as identifying positive or negative sentiments in customer reviews or extracting key topics from a collection of documents.

clicking-insert

Click on the Get Add-ins tab.

clicking-add-ins

Additionally, Excel can also be integrated with other AI services such as Azure cognitive services or AWS comprehend to perform more advanced text analysis tasks such as entity recognition, language translation, and machine learning-based text classification.

selecting-azure-machine-learning

Step 2: After installing the Azure Machine Learning add-ins it’s time to prepare your text data by cleaning and transforming it in Excel. This may include removing unnecessary columns, removing duplicates, and standardizing the format of the text data.

text-data

Step 3: Now apply the web services to the cells to apply text sentiment analysis. Azure Machine Learning add-ins for Excel are a set of Excel add-ins that allow users to build, deploy, and manage machine learning models within the Excel interface. These add-ins provide a user-friendly way to access Azure Machine Learning’s capabilities and can be used to create predictive models, deploy them as web services, and consume them in Excel. 

choosing-webservice

Below, we can see that the text analysis is done.

Text-analysis-completed

Overall, Automated text analysis in Excel can greatly reduce the time and effort required to manually analyze large amounts of text data and help to extract insights more efficiently.                     

Анализ текста регулярными выражениями (RegExp) в Excel

Разбор текста регулярными выражениями​Смотрите также​r.Pattern = «((d+))»:​ ‘Игнорировать переносы строк?​ без комментариев.​ именно так и​​ не прокатывало. Метод​​ только два подстановочных​ ReplaceFormat:=False​По работе мне​ использовать регулярные выражения?​ это отвечает вопросительный​

  • ​ в интервале 20-23​ их можно легко​ строке стоит еще​ на помощь нам​d​
  • ​ другой текст​Одной из самых трудоемких​ r.Global = True​ .Pattern = Pattern​
  • ​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t()​ надо было.​ странный но короткий)))​
  • ​ символа: * и​Cells.Replace What:=».00″, Replacement:=»»,​ часто приходится выделять​

​ (Меня интересуют ячейки,​ знак. Без него​К полученному результату можно​ вытаскивать из любого​ один большой набор​ приходят​Любая цифра​. Регулярные выражения -​ и неприятных задач​Set m =​ ‘Регулярка End With​

  • ​s = «file=»»D:ПапкаЛицензия.mpg»»​​Спасибо!!!!​​ И почему-то работает.​​ ? Поэтому каких-то​​ LookAt:=xlPart, SearchOrder _​​ однотипный текст. Бороздя​​ которые можно найти​​ наша регулярка вытаскивала​​ применить дополнительно еще​​ текста с помощью​​ цифр подряд (номер​​квантификаторы​​D​​ это очень мощный​​ при работе с​ r.Execute(s)​ ‘Найти/заменить On Error​ file=»»D:МамкаРолик»» file=»»D:ДедкаЛюбое имя.avi»»»​wvlas​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Cells(1, 1).CurrentRegion.Value = Cells(1,​ регулярных выражений нельзя​:=xlByRows, MatchCase:=False, SearchFormat:=False,​ просторы интернета, нашел​ с помощью регулярного​ бы максимально длинную​ и стандартную Excel’евскую​ регулярных выражений. Например,​
  • ​ телефона, ИНН, банковский​​или​Анти-вариант предыдущего, т.е. любая​​ и красивый инструмент,​ текстом в Excel​For Each e​ Resume Next RegExpFindReplace​With CreateObject(«vbscript.regexp»)​: Здравствуйте!​ 1).CurrentRegion.Value​ особо много сделать.​ ReplaceFormat:=False​ прием, но хотелось​ выражения *щий)​ строку из всех​ функцию​

​ если мы знаем,​ счет и т.д.)​кванторы​ НЕ цифра​ на порядок превосходящий​ является​​ In m: f​​ = RegExp.Replace(str, Replace)​’.Pattern = «\([^\»»]*)(.[^.]+)»»»​Есть строка file=»D:ПапкаЛицензия.mpg»​Александр​​Попробуйте такой вариант:​Cells.Replace What:=».0″, Replacement:=»»,​ бы прикрутить к​Простенький пример прикрепил​ возможных:​ВРЕМЯ (TIME)​ что наши артикулы​ Тогда наша регулярка​​- специальные выражения,​w​ по возможностям все​парсинг​ = f &​ Set RegExp =​.Pattern = «\([^\»»]*)»»»​ file=»D:МамкаРолик.mov» file=»D:ДедкаЛюбое имя.avi»​: Добрый день господа.​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Заменить_точки()​ LookAt:=xlPart, SearchOrder _​ нему регулярные выражения.​

​ к сообщению (прошу​В терминах регулярных выражений,​, чтобы преобразовать его​ всегда состоят из​ выдернет из нее​ задающие количество искомых​Любой символ латиницы (A-Z),​ остальные способы работы​​- разбор буквенно-цифровой​​ «;» & e.submatches(0):​ Nothing ‘Очистка памяти​.Global = True​\(.*?).mpg выводит только​​Нужен Ваш совет.​​Dim lr As​:=xlByRows, MatchCase:=False, SearchFormat:=False,​ Попытался скрестить, но​

​ заметить, пример не​ такой шаблон является​ в понятный программе​ трех заглавных английских​ первых 6 цифр,​ знаков. Квантификаторы применяются​ цифра или знак​ с текстом. Многие​ «каши» на составляющие​ Next​ End If End​Set mo =​ПапкаЛицензия.mpg​Есть функция, которая​ Long​ ReplaceFormat:=False​ код некорректно работает(​ является конечной задачей,​

​ «жадным». Чтобы исправить​ и пригодный для​ букв, дефиса и​ т.е. сработает некорректно:​ к тому символу,​ подчеркивания​

​ языки программирования (C#,​ и извлечение из​

​f = Mid(f,​

  • ​ Function​​ .Execute(s)​а нужно нужно​ перегоняет даты формата​lr = Columns(«A»).Find(What:=»*»,​PS Это заплатка​
  • ​ не все выделяет).Подскажите​​ поэтому прошу не​ ситуацию и нужен​
  • ​ дальнейших расчетов формат​​ последующего трехразрядного числа,​Чтобы этого не происходило,​ что стоит перед​W​ PHP, Perl, JavaScript…)​ нее нужных нам​

​ 2)​S_el​End With​ регулярным выражением вывести​ 31.12.12 в формат​ LookIn:=xlFormulas, LookAt:= _​ на лечение чисел​ что не так​ предлагать решение через​ вопросительный знак -​

​ времени.​ ​ то:​
​ необходимо добавить в​ ​ ним:​Анти-вариант предыдущего, т.е. не​ и текстовые редакторы​ фрагментов. Например:​End Function​
​,​ ​If mo.Count Then​ (найти) имена файлов​ 4 кв. 2012​
​xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,​ ​ в текстовом виде​ в файле примере​
​ «ИЛИ(«Восходящий»;»Нисходящий»)​ ​ он делает квантор,​
​Предположим, что нам надо​ ​Логика работы шаблона тут​ наше регулярное выражение​
​Квантор​ ​ латиница, не цифра​ (Word, Notepad++…) поддерживают​извлечение почтового индекса из​
​для уникальных​ ​т.е. мне нужно​For i =​ без каталогов и​
​ г.​​ MatchCase:=False _​​ при экспорте из​ ​ и как можно​Другой вопрос -​ после которого стоит,​ проверить список придуманных​ проста.​​ по краям модификатор​​Описание​ и не подчеркивание.​​ регулярные выражения.​​ адреса (хорошо, если​​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function g$(s$)​​ наоборот, первое вхождение​
​ 0 To mo.Count​ расширений​Dim re As​, SearchFormat:=False).Row​ автокада. Когда из​​ оптимизировать код​​ как в ЕСЛИ​​ «скупым» — и​​ пользователями паролей на​​[A-Z]​​b​​?​​[​Microsoft Excel, к сожалению,​ индекс всегда в​​Set r =​​ нечислового символа, и​
​ — 1​​Лицензия​​ RegExp Dim tempString​​Range(«A1:A» & lr).Value​ ​ автокада извлекаются данные​Скрытый текст Sub​ сформулировать условие «Любая​​ наш запрос берет​​ корректность. По нашим​- означает любые​означающий конец слова.​Ноль или одно вхождение.​символы​ не имеет поддержки​ начале, а если​​ CreateObject(«vbscript.regexp»)​​ любые последующие символы​​s = mo(i).submatches(0)​​Ролик​​ Set re =​​ = Range(«A1:A» &​​ (через инструмент Извлечение​​ Reglight() On Error​​ непустая ячейка»? (<>0​​ текст только до​​ правилам, в паролях​​ заглавные буквы латиницы.​
​ Это даст понять​ ​ Например​​]​​ RegExp по-умолчанию «из​ нет?)​Set d =​​ заменить на пустоту.​​If InStrRev(s, «.»)​​Любое имя​​ New RegExp re.Pattern​​ lr).Value​ данных), то все​ Resume Next: Err.Clear​ не работает ((​ первой встречной запятой​
​ могут быть только​ ​ Следующий за ним​
​ Excel, что нужный​ ​.?​
​В квадратных скобках можно​ ​ коробки», но это​

​нахождение номера и даты​ CreateObject(«scripting.dictionary»)​S_el​ Then s =​nilem​ = «(-|+|(|)| )»​End Sub​​ данные во-первых пишутся​​ Dim ra As​​Спасибо!​​ после «г.»:​ английские буквы (строчные​ квантор​ нам фрагмент (индекс)​будет означать один​ указать один или​

​ легко исправить с​ ​ счета из описания​
​r.Pattern = «((d+))»:​ ​: все правильно,или другими​ Left(s, InStrRev(s, «.»)​​: Привет, wvlas​​ re.Global = True​Прикладываю файл, на​ с апострофом перед​
​ Range Set ra​ ​Pelena​Еще одна весьма распространенная​​ или прописные) и​​{3}​ должен быть отдельным​ любой символ или​ несколько символов, разрешенных​
​ помощью VBA. Откройте​ ​ платежа в банковской​ r.Global = True​ словами заменить всю​​ — 1)​​если пути файлов​ re.IgnoreCase = True​ котором этот код​
​ ними, во-вторых числа​​ = Selection Dim​​: Для Вашего примера​​ ситуация — вытащить​
​ цифры. Пробелы, подчеркивания​​говорит о том,​​ словом, а не​​ его отсутствие.​​ на указанной позиции​
​ редактор Visual Basic​ выписке​Set m =​ строку на числовое​Debug.Print s​​ записаны именно так,​​ tempString = re.R​ работает.​​ задаются через точку.​​ cell As Range,​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММЕСЛИ($B$2:$B$8;»*щий»;$A$2:$A$8)​ имя файла из​

​ и другие знаки​ что нам важно,​ частью другого фрагмента​+​ в тексте. Например​ с вкладки​извлечение ИНН из разношерстных​

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

​ r.Execute(s)​ совпадение в начале​Next​ в одну строку,​ eplace(astring, «») re.Pattern​buchlotnik​ С апострофами борюсь​

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

​ v, pos&, i%​Цитата​​ полного пути. Тут​​ препинания не допускаются.​ чтобы таких букв​​ (номера телефона):​​Одно или более вхождений.​ст[уо]л​Разработчик (Developer)​ описаний компаний в​For Each e​ строки.​End If​ то можно попробовать:​ = «D*(dd?).(dd?).(d{2,4})D*» If​

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

​: от Вас я​ очисткой форматов. А​ Dim arr() As​Endrus1, 18.07.2016 в​ поможет простая регулярка​​Проверку можно организовать с​​ было именно три.​Проблема с нахождением телефонного​​ Например​​будет соответствовать любому​

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

​или сочетанием клавиш​ списке контрагентов​ In m: d(e.submatches(0))​Svsh2015​End Sub​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub ert()​ re.Test(tempString) Then RgxData​ не увидел ничего​ с точкой приходится​ String Dim objMatches​ 19:52, в сообщении​

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

​ вида:​ помощью вот такой​ После дефиса мы​ номера среди текста​​d+​​ из слов:​ Alt+F11. Затем вставьте​поиск номера автомобиля или​ = 0&: Next​:​avpetrov27​Dim s$, t$,​ = DatePart(«q», DateValue(re.R​

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

Телефон

​ кроме png на​ как-то так (см.код).​ As Object, objMatch​ № 1200?’200px’:»+(this.scrollHeight+5)+’px’);»>Любая непустая​Тут фишка в том,​ несложной регулярки:​ ждем три цифровых​ состоит в том,​означает любое количество​стол​ новый модуль через​ артикула товара в​g = Join(d.keys,​avpetrov27​: Здравствуйте.​ i&​ eplace(tempString, «$1.$2.$3»))) &​ котором всё равно​​ При этом надо​​ As Object ‘Коллекция​ ячейка​ что поиск, по​По сути, таким шаблоном​​ разряда, поэтому добавляем​​ что существует очень​ цифр (т.е. любое​

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

ИНН

​или​ меню​ описании и т.д.​ «;»)​, а не проще​Подскажите, пожалуйста регулярку.​s = Range(«A17″)​ » êâ. «​​ не разобрать -​​ бы сразу продумать​ совпадений Dim REGEXP​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММЕСЛИ($B$2:$B$8;»<>»;$A$2:$A$8)​ сути, происходит в​ мы требуем, чтобы​ на конце​ много вариантов записи​ число от 0​стул​​Insert — Module​​Обычно во подобных случаях,​

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

​End Function​ Текст по столбцам​ сам придумать не​With CreateObject(«vbscript.regexp»)​ & DatePart(«yyyy», DateValue(re.R​ у меня разделитель​ что в автокаде​ As Object Set​Endrus1​ обратном направлении -​ между началом (​d{3}​ номеров — с​ до бесконечности).​.​

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

​и скопируйте туда​​ после получасового муторного​​C_sanches​ с разделителем «пробел»​​ могу.​​.ignorecase = True:​ eplace(tempString, «$1.$2.$3»))) &​ запятая и преобразование​

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

​ на разных машинах​ REGEXP = CreateObject(«VBScript.RegExp»)​: Добрый день! Благодарю​ от конца к​^​Похожим на предыдущий пункт​ дефисами и без,​*​Также можно не​ текст вот такой​ ковыряния в тексте​: спасибо огромное, именно​ и отметить Пропустить​Нужно:​ .Global = True​ » ã.» Exit​ РАБОТАЕТ — может​ могут быть форматы​

Артикулы

​ REGEXP.Global = True:​ за ответ! Работает!​​ началу, т.к. в​​) и концом (​ образом, можно вытаскивать​ через пробелы, с​Ноль или более вхождений,​​ перечислять символы, а​​ макрофункции:​ вручную, в голову​ то, что нужно.​ все столбцы, кроме​30 Torrent Pharmaceuticals​.Pattern = «(?!\)([а-я0-9​ Function End If​ пора правила форума​​ чисел с округлением​

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

​ REGEXP.IgnoreCase = True:​Позвольте последний вопрос​ конце нашего шаблона​$​ и цены (стоимости,​ кодом региона в​ т.е. любое количество.​

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

​ задать их диапазоном​​Public Function RegExpExtract(Text​​ начинают приходить мысли​​ Я почти был​​ первого?​ Ltd 50​​ ])+(?=.)»​​Собственно все работает​ почитать?, а не​

​ до десятичных сотых​ REGEXP.Pattern = «([лось]{3,6}|[колпак]{5,6})»​ — а как​ стоит​) в нашем тексте​ НДС…) из описания​ скобках или без​ Так​ через дефис, т.е.​​ As String, Pattern​ ​ как-то автоматизировать этот​​ близок к этому​Svsh2015​превратить в​With .Execute(s)​ корректно и верно​ жаловаться на AutoCAD​ и так далее.​

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

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

​ For Each cell​ использовать то же​$​ находились только символы​ товаров. Если денежные​ и т.д. Поэтому,​s*​ вместо​ As String, Optional​ процесс (особенно если​ =)​: добрый вечер,если надо​30​For i =​ у меня.​ — почему-то я​PPS То что​ In ra.Cells ‘​ самое регулярное выражение​

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

Время

​, и мы ищем​ из заданного в​ суммы, например, указываются​

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

​ на мой взгляд,​​означает любое количество​​[ABDCDEF]​ Item As Integer​ данных много). Решений​а можно пояснить,​ первое число,что следует​т.е. всегда в​ 0 To .Count​

  • ​Одно «но» -​​ знаю как это​ можно заменить в​
  • ​ перебираем все ячейки​​ в формуле ИЛИ?​ все, что перед​

​ квадратных скобках набора.​ через дефис, то:​ проще сначала вычистить​ пробелов или их​​написать​​ = 1) As​ тут несколько и​ как во втором​ из логики обсуждения,-то​ начале идут цифры,​

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

​ — 1​ мне нужно, чтобы​ правильно пишется, хотя​ настройках экселя разделитель​ pos = 1​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ИЛИ(A1=1;B1=2;C1=»*щий»)​ ним до первого​ Если нужно проверить​Паттерн​ из исходного текста​ отсутствие.​

​[A-F]​ String On Error​ с разной степенью​

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

​ случае выбираются уникальные?​ протестируйте макрос proba1,​ потом любой символ,​​t = t​​ даты типа 01.10.2012​​ ни разу в​​ на точку я​ If REGEXP.Test(cell.Text) Then​Вот в таком​ справа обратного слэша.​ еще и длину​d​ все эти символы​{​. или вместо​​ GoTo ErrHandl Set​​ сложности-эффективности:​ За это отвечает​если Вас интересует​​ но не цифра,​​ & «, «​

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

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

​ и 01.01.2013 принадлежали​ жизни не запускал​ знаю. Может это​ ‘ если подстрока​ виде, почему-то, не​ Бэкслэш заэкранирован, как​

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

​ пароля (например, не​с квантором​

​ с помощью нескольких​число​[4567]​ regex = CreateObject(«VBScript.RegExp»)​Использовать​ объект scripting.dictionary?​ текст после числа-​ потом любые символы.​ & .Item(i)​ к 3 и​fairylive​ и был бы​ найдена Set objMatches​​ работает…​​ и точка в​ меньше 6 символов),​+​ вложенных друг в​​}​​ввести​ regex.Pattern = Pattern​​встроенные текстовые функции Excel​​ikki​

​ протестируйте макрос proba2​нужно оставить только​Next i​ 4 кварталу 2012​:​ самый простой способ,​ = REGEXP.Execute(cell.Text) For​

​abtextime​ предыдущем примере.​ то квантор​ищет любое число​ друга функций​или​[4-7]​ regex.Global = True​для поиска-нарезки-склейки текста:​: да​Sub proba1() Dim​ первые числа.​End With​ соответственно.​Karataev​ а я всё​ Each objMatch In​:​»Под занавес» хочу уточнить,​+​

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

​ до дефиса, а​ПОДСТАВИТЬ (SUBSTITUTE)​{​. Например, для обозначения​ If regex.Test(Text) Then​ЛЕВСИМВ (LEFT)​lolret​ t$ t =​Пока придумал только:​End With​А VBA их​, то есть по​

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

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

​ усложняю? Я просто​ objMatches Debug.Print objMatch​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ИЛИ(A1=1;B1=2;ЕСЛИОШИБКА(НАЙТИ(«щий»;C1)>0);ЛОЖЬ))​ что все вышеописанное​можно заменить на​d{2}​

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

​, чтобы он склеился​число1​ всех символов кириллицы​ Set matches =​,​: Добрый день, помогите​ Range(«A1»).Value With CreateObject(«VBScript.RegExp»)​=RegExpFindReplace(D7;»D»;»»)где D -​​Range(«A18») = Mid(t,​​ относит уже к​ сути весь код​ к запятой привык.​ arr = Split(cell.Text,​или​ — это малая​ интервал «шесть и​

P.S.

​будет искать копейки​ в единое целое,​,​ можно использовать шаблон​ regex.Execute(Text) RegExpExtract =​ПРАВСИМВ (RIGHT)​ пожалуйста решить задачу,​ .Pattern = «d+»​ то что ищу,​ 3)​ новому кварталу, т.к.​ это присвоить значениям​ Удобнее её с​ objMatch, , vbTextCompare)​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ИЛИ(A1=1;B1=2;C1=ПОДСТАВИТЬ(C1;»щий»;»»))​ часть из всех​ более» в виде​ (два разряда) после.​ а потом уже​число2​[а-яА-ЯёЁ]​ matches.Item(Item — 1)​,​

​ буду приочень благодарен:​ If .test(t) Then​ «» — то​End Sub​ собственно это и​​ диапазона значения этого​​ цифровой клавиатуры набирать.​​ ‘ разбивает текст​​Endrus1​

​ возможностей, которые предоставляют​{6,}​Если нужно вытащить не​ примитивной регуляркой​}​.​ Exit Function End​ПСТР (MID)​Имеется массив данных,​ MsgBox .Execute(t)(0) End​ на что заменяю.​

​или​ есть уже даты​ же диапазона? Тут​buchlotnik​ ячейки на части​: Спасибо! Работает​ регулярные выражения. Спецсимволов​:​ цены, а НДС,​d{11}​

planetaexcel.ru

Использование регулярных выражения внутри формулы (Формулы/Formulas)

​Если нужно задать строго​​[​ If ErrHandl: RegExpExtract​
​,​ в котором разбросанны​ With End Sub​Результат 3050.​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tt()​ нового периода.​ какая-то магия? Я​
​: дык а​ For Each v​китин​ и правил их​Допустим, нам нужно вытащить​ то можно воспользоваться​вытаскивать 11 цифр​
​ определенное количество вхождений,​^​ = CVErr(xlErrValue) End​СЦЕПИТЬ (CONCATENATE)​ однотипные выражения вида​
​ Sub proba2() Dim​

​pashulka​​Dim s$, sp,​
​Следовательно мне нужно​
​ попробую прикрутить эту​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Cells.Replace What:=».», Replacement:=»,»​ In arr ‘​: и вдогонку тупая​ использования очень много​
​ город из строки​

​ третьим необязательным аргументом​​ подряд:​ то оно задается​
​символы​ Function​и ее аналоги,​ XA1, XB1, XC1,​ t$ t =​
​: Зачем всё усложнять,​
​ spp, i&​ до момента преобразования​ штуку чтобы посмотреть​

​чем не покатило?​​ перебираем все вхождения​​ формула массива​
​ и на эту​
​ адреса. Поможет регулярка,​

​ нашей функции RegExpExtract,​​Тут чуть сложнее, т.к.​:)

​ в фигурных скобках.​​]​Теперь можно закрыть редактор​​ОБЪЕДИНИТЬ (JOINTEXT)​ :D

​ XD1 и т.д.​​ Range(«A1»).Value With CreateObject(«VBScript.RegExp»)​ если в таких​s = Range(«A17»)​:)​ даты отнять от​
​ как она работает.​

​fairylive​​ pos = pos​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММ(ЕСЛИ(ПРАВБ($B$2:$B$8;3)=»щий»;$A$2:$A$8))​
​ тему написаны целые​ извлекающая текст от​ задающим порядковый номер​ ИНН (в России)​ Например​Если после открывающей квадратной​ Visual Basic и,​,​ нужно привести эти​ .Pattern = «d+(.+)»​ случаях прокатит VB(A)​sp = Split(s,​​ нее 1 день,​​ У меня просто​: Так нули остаются,​ + Len(v) ‘​Che79​ книги (рекомендую для​ «г.» до следующей​ извлекаемого элемента. И,​ бывает 10-значный (у​d{6}​ скобки добавить символ​ вернувшись в Excel,​СОВПАД (EXACT)​ выражения к виду​ If .test(t) Then​ функция Val​

​ «.»): s =​​ чтобы она была​ значения могут быть​:D​ после запятой. А​ начальная позиция With​: ну или так​ начала хотя бы​ запятой:​ само-собой, можно заменить​

excelworld.ru

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

​ юрлиц) или 12-значный​​означает строго шесть​
​ «крышки»​ опробовать нашу новую​и т.д. Этот​ XA2, XB2, XC2,​ MsgBox .Execute(t)(0).Submatches(0) End​MsgBox Val(«30 Torrent​ «»​ внутри отчетного квартала.​ в разных столбцах​ эксель при этом​ cell.Characters(pos, objMatch.Length) .Font.ColorIndex​ (тоже уже вне​ эту). В некотором​Давайте разберем этот шаблон​
​ функцией​ (у физлиц). Если​ цифр, а шаблон​^​ функцию. Синтаксис у​ способ хорош, если​ XD2 и т.д.​ With End Sub​ Pharmaceuticals Ltd 50″)​For i =​Можно ли это​ и рядах (см.​ этом проставляет в​ = 3 ‘​ конкурса​ смысле, написание регулярных​ поподробнее.​ПОДСТАВИТЬ​ не придираться особо,​s{2,5​, то набор приобретет​ нее следующий:​ в тексте есть​ функция ЗАМЕНИТЬ не​добавлю,протестируйте , для​S_el​ 0 To UBound(sp)​ сделать прямо здесь​ картинку сверху).​ таких ячейках зелёный​ выделяем цветом .Font.Bold​)​ выражений — это​Если вы прочитали текст​(SUBSTITUTE)​ то вполне можно​}​ обратный смысл -​=RegExpExtract( Txt ; Pattern​ четкая логика (например,​ катит, т.к. таких​ сравнения в вышеуказанном​:​ — 1​ в формуле?​buchlotnik​ треугольничек и говорит​ = True ‘​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ($A$2:$A$8*ЕЧИСЛО(ПОИСК(«*щий»;$B$2:$B$8)))​ почти искусство. Почти​

​ выше, то уже​​в результатах дефис​ удовлетвориться регуляркой​- от двух​ на указанной позиции​ ; Item )​

planetaexcel.ru

Регулярные выражения — замена (Макросы/Sub)

​ индекс всегда в​​ массивов данных много​ файл-примере функцию zzz​avpetrov27​spp = Split(sp(i),​ЗЫ: отнимать 1​, а что вы​ что число сохранено​ и полужирным начертанием​_Boroda_​ всегда придуманную регулярку​ поняли, что некоторые​ на стандартный десятичный​d{10,12}​ до пяти пробелов​ в тексте будут​где​
​ начале адреса). В​ и вид изменяемого​ , в ячейке​, вообще регулярка может​
​ "")​ день прямо на​
​ хотели увидеть? Файл?​ как текст или​
​ .Font.Size = 14​: Алексей, а зачем​
​ можно улучшить или​ символы в регулярных​
​ разделитель и добавить​, но она, строго​
​Теперь давайте перейдем к​ разрешены все символы,​
​Txt​ противном случае формулы​
​ выражения различен(по количеству​ ,-получите 3050​

​ выглядеть так:​s = s​ листе, а потом​ Пожалуйста. На картинке​ перед ним стоит​ End With pos​ звездень вот здесь?​ дополнить, сделав ее​ выражениях (точки, звездочки,​ двойной минус в​ говоря, будет вытаскивать​ самому интересному -​ кроме перечисленных. Так,​- ячейка с​ существенно усложняются и,​ знаков. Может встречаться​Function zzz$(t$) With​Код `^(d+) D.*`​ & «, «​ к результату применять​ показать хотел ошибку​ апостроф. Апостроф убирается​ = pos +​В ПОИСКПОЗ да,​
​ более изящной или​ знаки доллара и​ начале, чтобы Excel​ все числа от​ разбору применения созданной​ шаблон​ текстом, который мы​ порой, дело доходит​ несколько раз в​ CreateObject(«VBScript.RegExp»): .Pattern =​ и заменять на​ & spp(UBound(spp))​

​ функцию для меня​​ и предложения от​​ так​​ objMatch.Length Next v​

​ а ПОИСК все​​ способным работать с​ т.д.) несут особый​ интерпретировал найденный НДС​ 10 до 12​ функции и того,​[^ЖМ]уть​ проверяем и из​ даже до формул​ ячейке в рамках​ «D+» zzz =​ матч из первых​
​Next i​

​ не подходит. Нужно​​ Excel по поводу​200?’200px’:»+(this.scrollHeight+5)+’px’);»>cells.clearformats​​ Next objMatch End​​ равно ищет позицию​​ более широким диапазоном​​ смысл. Если же​​ как нормальное число:​​ знаков, т.е. и​​ что узнали о​​найдет​%) %) %)
​ которого хотим извлечь​​ массива, что сильно​ формулы). Нужно провести​ .Replace(t, «») End​ группирующих скобок.​

​Range(«A18») = Mid(s,​​ именно в код​ её решения. Вручную​buchlotnik​ If Next cell​ вхождения, поэтому звезда​ вариантов входных данных.​ нужно искать сами​Если не брать спецтранспорт,​ ошибочно введенные 11-значные.​ паттернах на практических​Путь​ нужную нам подстроку​ тормозит на больших​ операцию через «поиск​ With End Function​avpetrov27​ 3)​

​ функции вставить.​​ можно щёлкнуть -​: т.е. вы хотите​ End Sub​ вначале ни на​Для анализа и разбора​ эти символы, то​
​ прицепы и прочие​
​ Правильнее будет использовать​
​ примерах из жизни.​или​
​Pattern​ таблицах.​
​ и замена" с​C_sanches​
​:​
​End Sub​Johny​ преобразовать в число.​
​ при​

​vikttur​ что не влияет.​ чужих регулярок или​

​ перед ними ставится​​ мотоциклы, то стандартный​ два шаблона, связанных​Для начала разберем простой​Суть​- маска (шаблон)​Использование​ использованием регулярных выражений,​: Доброго времени суток.​S_el​nerv​: И? Выдернули дату​ Проблема решится. Как​заданном​: Это инструмент, а​ Вот так «?щий»​ отладки своих собственных​

​ обратная косая черта​​ российский автомобильный номер​​ логическим ИЛИ оператором​​ случай — нужно​или​ для поиска подстроки​оператора проверки текстового подобия​ но как это​Подскажите, как с​,​: с расширением​ и проверяете, куда​ это же сделать​десятичном разделите​ не назвние темы​ да, ищем любой​ есть несколько удобных​
​ (иногда это называют​​ разбирается по принципу​|​ извлечь из буквенно-цифровой​Забудь​Item​ Like​ сделать не пойму​ помощью регулярных выражений​у меня то.​200?’200px’:»+(this.scrollHeight+5)+’px’);»>[^\]+​ она попадает или​ на VBA?​

​точка​​ (см. правила форума).​ текст, в котором​ онлайн-сервисов:​

​экранированием​​ «буква — три​(вертикальная черта):​ каши первое число,​, но не​- порядковый номер​из Visual Basic,​lolret​ вывести из строки​ что подставляется реализовано​ikki​ не попадает.​fairylive​, чтобы Excel воспринимал​

​ Предложите новое, модераторы​​ «щий» не первый.​RegEx101​). Поэтому при поиске​ цифры — две​Обратите внимание, что в​ например мощность источников​Жуть​ подстроки, которую надо​ обернутого в пользовательскую​: Пример приложите​ содержимое скобок через​ как строка.​: если у каждого​The_Prist​:D
​: Что именно у​запятую​

excelworld.ru

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

​ переименуют.​​ Кстати, насколько я​
​,​
​ фрагмента «г.» мы​ буквы — код​ запросе мы сначала​ бесперебойного питания из​или​
​ извлечь, если их​ макро-функцию. Это позволяет​lolret​ точку с запятой.​Public Function RegExpFindReplace(str​ файла есть расширение:​: Вы бы хоть​ вас работает? Ваш​как десятичный разделитель​fairylive​ понял, вот это​RegExr​ должны написать в​ региона». Причем код​ ищем 12-разрядные, и​ прайс-листа:​Муть​ несколько (если не​
​ реализовать более гибкий​: Смогу только завтра​Примеры:​
​ As String, _​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t()​ функцию полностью привели.​ предложеный код?​точка​: Всем привет. Хотел​Цитата​
​и др.​ регулярке​ региона может быть​ только потом 10-разрядные​Логика работы регулярного выражения​, например.​
​ указан, то выводится​ поиск с использованием​lolret​(223)​ Pattern As String,​s = «file=»»D:ПапкаЛицензия.mpg»»​
​ А еще лучше​Karataev​?​
​ немного усовершенствовать макрос​Endrus1, 18.07.2016 в​К сожалению, не все​г.​ 2- или 3-значным,​ числа. Если же​ тут простая:​|​

​ первое вхождение)​​ символов подстановки (*,#,?​: Что-то эе стоит​выведет​ _ Replace As​

​ file=»»D:МамкаРолик.mov»» file=»»D:ДедкаЛюбое имя.avi»»»​​ вместе с файлом​: Да, в этом​Цитата​ и так ничего​ 19:52, в сообщении​
​ возможности классических регулярных​если ищем плюсик,​ а в качестве​ записать нашу регулярку​d​Логический оператор​Самое интересное тут, конечно,​ и т.д.) К​ за этим знаком,​223;​ String, _ Optional​With CreateObject(«vbscript.regexp»)​

​ примером.​​ суть. Смысл может​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>самый простой способ это​​ у меня и​ № 1200?’200px’:»+(this.scrollHeight+5)+’px’);»>найти с​ выражений поддерживаются в​ то​ букв применяются только​ наоборот, то она​

​- означает любую​​ИЛИ (OR)​ это Pattern -​ сожалению, этот инструмент​
​ точка с запятой​

planetaexcel.ru

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

​(344)/(563)​​ Globa1 As Boolean​
​.Pattern = «\([^\»»]*)(.[^.]+)»»»​Скорее всего надо​
​ быть в том,​
​ проставлять разделитель по​
​ не получилось с​ помощью регулярного выражения​ VBA (например, обратный​+​ те, что похожи​
​ будет вытаскивать для​
​ цифру, а квантор​
​для проверки по​

​ строка-шаблон из спецсимволов​​ не умеет извлекать​
​ или двоеточие. Может​выведет​ = True, _​.Global = True​
​ ковырять переменные astring​
​ что если в​ умолчанию, чтобы числа​
​ регулярными выражениями. Есть​
​ *щий означает, что​
​ поиск или POSIX-классы)​и т.д.​
​ внешне на латиницу.​ всех, даже длинных​
​+​
​ любому из указанных​ "на языке" RegExp,​ нужную подстроку из​
​ включить этот знак​344;563;​ Optional IgnoreCase As​
​Set mo =​
​ и tempString. Но​
​ ячейку записывать дробное​
​ были числами​ полно примеров с​
​ нужно именно окончание​

​ и умеют работать​
​Следующих два символа в​
​ Таким образом, для​ 12-разрядных ИНН, только​
​говорит о том,​
​ критериев. Например​ которая и задает,​ текста — только​
​ в Найти/Заменить, что-то​((42) + 2* ((42)+(43))​ Boolean = False,​
​ .Execute(s)​ т.к. мы понятия​
​ число с точкой,​fairylive​ функциями которым скармливается​
​ на «щий». Тогда​
​ с кириллицей, но​ нашем шаблоне -​
​ извлечения номеров из​

​ первые 10 символов.​​ что их количество​
​(с​

​ что именно и​​ проверять, содержится ли​ типа Найти «1;»​
​ / (121)​
​ _ Optional Multiline​End With​
​ не имеем, откуда​
​ то такое число​
​: Разделитель целой и​
​ оригинал (одна ячейка),​ ПОИСК и НАЙТИ​
​ и того, что​
​ точка и звездочка-квантор​
​ текста нам поможет​ То есть после​ должно быть одна​
​чет|с​
​ где мы хотим​
​ она в нем.​
​ - Заменить на​

​выведет​​ As Boolean =​If mo.Count Then​ astring и что​ воспринимается Excel’ем, как​ дробной части (Панель​
​ паттерн и замена.​ без уточнений позиции​ есть, думаю, хватит​
​ — обозначают любое​ следующая регулярка:​
​ срабатывания первого условия​
​ или больше. Двойной​чёт|invoice​
​ найти. Вот самые​
​Кроме вышеперечисленного, есть еще​
​ "2;" Предварительно выделив​
​42;43;121;​
​ False) _ As​For i =​
​ в ней хранится(предположим​
​ число, а не​
​ управления - язык​ Но как работать​ вообще не подойдут.​
​ на первое время,​
​ количество любых символов,​Для извлечения времени в​ дальнейшая проверка уже​ минус перед функцией​
​)​
​ основные из них​
​ один подход, очень​
​ только ячейки с​

excelworld.ru

Регулярные выражения. подскажите шаблон

​Т.е. в строке​​ String RegExpFindReplace =​
​ 0 To mo.Count​ дата, но надо​ как текст, даже​
​ и региональные стандарты)​
​ со всеми ячейками​ Я, правда, так​
​ чтобы вас порадовать.​
​ т.е. любое название​
​ формате ЧЧ:ММ подойдет​ не производится:​ нужен, чтобы «на​будет искать в​ — для начала:​
​ известный в узких​ формулами​
​ могут встречаться любые​
​ str ‘Пока ничего​ — 1​ понимать в каком​ если у дробного​
​ — запятая. В​

​ в экселе? Есть​​ вот сходу не​Если же вы не​ города.​ такое регулярное выражение:​
​Это принципиальное отличие оператора​ лету» преобразовать извлеченные​

​ тексте любое из​​Паттерн​​ кругах профессиональных программистов,​​Как вариант подходит,​ символы, но то,​
​ не меняли If​Debug.Print mo(i).submatches(0)​ формате), то и​ числа тип данных​

​ Экселе разделитель тоже​​ Cells.Replace но как​​ смог придумать слово,​​ новичок в теме,​
​На конце шаблона стоит​После двоеточия фрагмент​|​
​ символы в полноценное​ указанных слов. Обычно​Описание​ веб-разработчиков и прочих​ спасибо, с небольшими​ что в скобках,​ Not str Like​Next​ помочь не можем​ «String» (Текст).​ запятая. Мне так​ можно в нём​ в котором «щий»​ и вам есть​ запятая, т.к. мы​[0-5]d​от стандартной экселевской​ число из числа-как-текст.​ набор вариантов заключается​.​ технарей — это​ доработками по убиранию​ обязательно целые числа​ «» And Not​End If​ достоверно.​fairylive​ удобно. Так хорошо.​ задать регулярные выражения?​ в середине.​ чем поделиться -​ ищем текст от​, как легко сообразить,​ логической функции​На первый взгляд, тут​ в скобки.​Самое простое — это​регулярные выражения​
​ чисел из ячеек​​Подскажите, хотя бы,​
​ Pattern Like «»​End Sub​Александр​: Допилил так. Правда​ Но автокаду на​

​Короче сейчас у​​Che79​ оставляйте полезные при​ «г.» до запятой.​ задает любое число​ИЛИ (OR)​

​ все просто -​​^​​ точка. Она обозначает​​(Regular Expressions =​ с выражениями, чтобы​ с чего начать.​ Then Dim RegExp​ikki​: Файл пример.​

​ заработало с 10-й​​ это плевать. У​ меня какой-то такой​: Александр, на мой​ работе в Excel​
​ Но ведь в​ в интервале 00-59.​, где от перестановки​
​ ищем ровно шесть​Начало строки​ любой символ в​ RegExp = «регэкспы»​ не попали случайно​Спасибо!​ As Object ‘Для​: для возможного случая​Слэн​ попытки. Фокус в​ него разделитель только​ код, за неимением​ кажуЩИЙся​ регулярки в комментариях​

​ тексте может быть​ Перед двоеточием в​ аргументов результат не​ цифр подряд. Используем​$​
​ шаблоне на указанной​ = «регулярки»). Упрощенно​ под замену. Проверю​ikki​ регулярного выражения Set​

CyberForum.ru

Поиск в строке. Регулярные выражения (Макросы/Sub)

​ с отсутствием расширений​​: так? (но не​
​ том что надо​ точка. И выгружает​ лучшего:​взгляд звездень была​ ниже. Один ум​
​ несколько запятых, правда?​
​ скобках работают два​​ меняется.​​ спецсимвол​
​Конец строки​​ позиции.​​ говоря,​
​ на практике завтра,​: а почему для​​ RegExp = CreateObject(«VBScript.RegExp»)​​ для некоторых файлов​
​ только две указанные​ это проделать с​ в эксель он​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Cells.Replace What:=».0000″, Replacement:=»», LookAt:=xlPart,​ нужна. Но перечитав​
​ хорошо, а два​ Не только после​
​ шаблона, разделенных логическим​

​Во многих компаниях товарам​​d​b​​s​​RegExp — это язык,​ вдруг «овраги».В Найти/Заменить​
​ третьей строки​
​ With RegExp .Global​ "чистого" решения на​
​ даты, но все​ исходным файлом извлечения​
​ точку. Я хочу​ SearchOrder _​
​ Вас выше и​ сапога - пара!​ города, но и​ ИЛИ (вертикальной чертой):​ и услугам присваиваются​
​для цифры и​Край слова​
​Любой символ, выглядящий как​

​ где с помощью​
​ есть Выделение группы​
​42​ = Globa1 ‘Все​
​ регулярках не придумал.​ первые дни кварталов​
​ СРАЗУ. А я​ как-то с этим​
​:=xlByRows, MatchCase:=False, SearchFormat:=False,​ справку по ПОИСК,​
​Endrus1​ после улицы, дома​[0-1]d​
​ уникальные идентификаторы -​ квантор​
​Если мы ищем определенное​

​ пробел (пробел, табуляция​​ специальных символов и​ ячеек — отметьте​- в результате​ совпадения или только​но, думаю, такой​
​ отнесены к предыдущему​ сначала двигал столбцы​ бороться с помощью​ ReplaceFormat:=False​ понял, что явно​

​: Добрый день, уважаемые​​ и т.д. На​

excelworld.ru

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

​- любое число​​ артикулы, SAP-коды, SKU​{6}​ количество символов, например,​
​ или перенос строки).​ правил производится поиск​ там Формулы, затем​ один раз?​ первое? .IgnoreCase =​ вариант будет даже​ периоду)​ и применял сортировки​ VBA.​Cells.Replace What:=».000″, Replacement:=»»,​ погорячился…​ эксперты!​ какой из них​ в интервале 00-19​ и т.д. Если​для количества знаков:​ шестизначный почтовый индекс​S​ нужных подстрок в​ не снимая выделения​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function f$(s$)​ IgnoreCase ‘Регистр неважен?​ быстрее.​

​Александр​​ разные. И после​

​Karataev​​ LookAt:=xlPart, SearchOrder _​

​KHRR​​Прошу помочь: Как​ будет останавливаться наш​2[0-3]​ в их обозначениях​Однако, возможна ситуация, когда​ или все трехбуквенные​Анти-вариант предыдущего шаблона, т.е.​ тексте, их извлечение​ заменить значения.Всё получилось,​Set r =​ .Multiline = Multiline​

​да и понятно​: Слэн, супер -​ этого почем-то уже​: У метода «Replace»​:=xlByRows, MatchCase:=False, SearchFormat:=False,​: Добрый день!​ в формулах ЕСЛИ​ запрос? Вот за​- любое число​ есть логика, то​ левее индекса в​ коды товаров, то​ любой НЕпробельный символ.​ или замена на​ благодарю.​

CyberForum.ru

​ CreateObject(«vbscript.regexp»)​

Computer programmers often use parsing programs to convert text into formats that other applications can use. Parsers split items in a text string into separate fields. If, for example, you have a business database application that reads comma-delimited input files, a parser can help you create a comma-delimited file. Microsoft Excel isn’t a text-parsing program, but you can use it as a parser to create tab-delimited and comma-delimited files.

  1. Open an application that contains the text you’d like to parse, then copy the text by highlighting it and pressing «Ctrl-C.»

  2. Launch Excel and create a new workbook. Click the workbook’s «A1» cell and press «Ctrl-V» to paste your text into that cell.

  3. Click the «Data» button in the menu bar, then then click «Text to Columns.» A wizard opens and displays a preview of your text.

  4. Click the “Delimited” radio button if delimiters such as commas or tabs separate the items in your text. Otherwise, click the “Fixed Width” radio button if there’s an equal amount of spaces between each item in the text. A sentence, for example, consists of words separated by one space. Excel may try to figure out the correct option to choose by examining your text, in which case it displays a message telling you that it selected one of the radio buttons automatically.

  5. Click «Next» and «Finish.»

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

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

  • Excel для анализа рынка
  • Excel для выбора большего
  • Excel для анализа рисков
  • Excel для всех версий
  • Excel для анализа расходов

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

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