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

  • Поделись Этим
Michael Brown

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

Когда речь идет об ограничении пользовательского ввода в таблицах Excel, валидация данных просто незаменима. Хотите разрешить только числа или даты в данной ячейке? Или ограничить текстовые значения определенной длиной? Или запретить время вне заданного диапазона? Нет проблем, все это можно легко сделать с помощью предустановленных или пользовательских критериев валидации. Но что, если я хочу разрешить только действительные адреса электронной почты или строки, которые соответствуютконкретный шаблон? Увы, это невозможно. Regex вы говорите? Хм... это может сработать!

    Как выполнить проверку данных в Excel с помощью Regex

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

    Учитывая вышесказанное, давайте вкратце опишем шаги, которые необходимо предпринять для проверки данных в Excel с помощью регексов:

    1. Создайте пользовательскую функцию Regex, которая проверяет, соответствует ли входное значение регулярному выражению.
    2. Задайте имя для формулы Regex.
    3. Настройте правило проверки данных на основе именованной формулы.
    4. Скопируйте параметры валидации в любое количество ячеек.

    Звучит как план? Давайте попробуем реализовать его на практике!

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

    В этом примере рассматривается очень распространенный случай - как разрешить только значения определенного шаблона.

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

    Узор : ^[A-Z]{3}-\d{3}$

    Обратите внимание, что начало (^) и конец ($) строки закреплены, поэтому в ячейку не могут быть введены символы, отличные от символов шаблона.

    1. добавьте пользовательскую функцию Regex Match

    Начните со вставки функции RegExpMatch в рабочую книгу. Код уже написан нашими гуру Excel, поэтому вам просто нужно скопировать его со страницы, на которую дана ссылка выше, и вставить в редактор VBA.

    Вот синтаксис функции для справки:

    RegExpMatch(text, pattern, [match_case])

    Где:

    • Текст (требуется) - исходная строка (в нашем контексте - проверенная ячейка).
    • Узор (требуется) - регулярное выражение для сопоставления.
    • Соответствие_случаю (необязательно) - тип соответствия. TRUE или опущено - чувствительный к регистру; FALSE - нечувствительный к регистру.

    Совет. Если вы являетесь пользователем нашего пакета Ultimate Suite, вы можете выполнять проверку данных Regex в Excel без добавления кода VBA в свои рабочие книги. Просто используйте пользовательскую функцию AblebitsRegexMatch, включенную в наши инструменты Regex.

    2. Создайте именованную формулу

    В целевом рабочем листе выделите ячейку A1 (независимо от ее содержимого и от того, какую ячейку вы собираетесь проверять), нажмите Ctrl + F3, чтобы открыть диспетчер имен, и задайте имя для этой формулы:

    =RegExpMatch(Sheet1!A1, "^[A-Z]{3}-\d{3}$")

    Или вы можете ввести regex в некоторую ячейку (A2 в данном примере) и указать $A$2 в качестве второго аргумента:

    =RegExpMatch(Sheet1!A1, Sheet1!$A$2)

    Чтобы формула работала правильно, обязательно используйте относительную ссылку для текст аргумент (A1) и абсолютная ссылка для шаблон ($A$2).

    Учитывая, что наша формула предназначена для проверки номеров SKU, мы называем ее соответствующим образом: Validate_SKU .

    Важное замечание! При определении формулы, пожалуйста, дважды проверьте, что первый аргумент относится к текущей выделенной ячейке Например, если на листе выделена ячейка A1, то в первый аргумент (согласно нашим рекомендациям) поставьте A1; если выделена ячейка B2, то в первый аргумент поставьте B2, и т.д. Не имеет значения, какую именно ссылку вы используете, если она соответствует текущей выделенной ячейке.

    Пошаговые инструкции см. в разделе Как сделать именованную формулу в Excel.

    3. настройка валидации данных

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

    1. Нажмите Данные вкладка> Валидация данных .
    2. В Разрешить в раскрывающемся списке выберите Пользовательский .
    3. Введите приведенную ниже формулу в соответствующее поле.

      =Validate_SKU

    4. Снимите выделение Игнорировать пустоту опцию, иначе ваше правило не будет работать.

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

    Если вы чувствуете, что вам нужны подробные шаги, то вот: Как настроить пользовательскую проверку данных в Excel.

    4. Копирование валидации данных в другие ячейки

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

    1. Выберите ячейку с проверкой данных и нажмите Ctrl + C, чтобы скопировать ее.
    2. Выберите другие ячейки, которые вы хотите проверить, щелкните их правой кнопкой мыши, щелкните Специальная вставка , и выберите Валидация вариант.
    3. Нажмите OK .

    Более подробную информацию можно найти в разделе Как копировать проверку данных.

    Теперь каждый раз, когда кто-то попытается ввести недействительный SKU в любую из проверенных ячеек, будет появляться следующее предупреждающее сообщение:

    Проверка электронной почты с помощью Regex

    Чтобы выполнить проверку электронной почты, вы начинаете с написания регулярного выражения, которое соответствует адресу электронной почты.

    Узор : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$

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

    А теперь укажите критерии валидации, выполнив уже знакомые шаги:

    1. Введите приведенный выше regex в B2.
    2. Выберите ячейку A1 и задайте имя под названием Validate_Email к которому относится:

      =RegExpMatch(Sheet1!A1, Sheet1!$B$2)

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

      =Validate_Email

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

    4. Скопируйте правило в ячейки ниже.

    Если адрес электронной почты, который вы вводите в проверяемую ячейку, не соответствует шаблону regex, появится следующее предупреждение:

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

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

    Пароль должен состоять не менее чем из 6 символов и может содержать только буквы (прописные или строчные) и цифры:

    Узор : ^[A-Za-z0-9]{6,}$.

    Пароль должен состоять минимум из 6 символов и включать как минимум одну букву и одну цифру:

    Узор : ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$

    Пароль должен состоять минимум из 6 символов и включать как минимум одну заглавную букву, одну строчную букву и одну цифру:

    Узор : ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d]{6,}$

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

    Узор : ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&_-])[A-Za-z\d@$!%*#?&_-]{6,}$

    После создания шаблона можно перейти к настройке валидации данных:

    1. Введите ваш пароль в C2.
    2. Выберите ячейку A1 и создайте именованную формулу с именем Validate_Password :

      =RegExpMatch(Sheet1!A1, Sheet1!$C$2)

    3. Для ячейки C5 создайте пользовательское правило валидации с помощью приведенной ниже формулы. Не забудьте снять выделение с ячейки C5. Игнорировать пустоту флажок.

      =Валидат_пароля

    4. Скопируйте правило в нужное количество ячеек.

    Теперь вы можете смело добавлять новые пароли в список. Если вводимая строка не соответствует regex, следующее предупреждение напомнит вам, какие типы значений принимаются:

    Валидация данных Regex не работает

    Если Regex Data Validation не работает в вашем Excel, скорее всего, это происходит по одной из следующих причин.

    Отсутствует функция RegExpMatch

    Перед применением функции Data Validation обязательно вставьте код функции RegExpMatch в рабочую книгу.

    Неправильное регулярное выражение

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

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

    Неправильно названная формула

    Очень распространенной причиной ошибки проверки данных является формула с именем Regex, ссылающаяся на неправильную ячейку. Во всех примерах мы рекомендовали определить формулу, ссылающуюся на A1:

    =RegExpMatch(A1, regex)

    Это работает только в том случае, если ячейка A1 активен при определении имени и относительная ссылка (без знака $) используется.

    Идея заключается в том, что относительная ссылка, указанная в формуле (A1), будет автоматически изменяться в зависимости от относительного положения проверяемой ячейки. Другими словами, ячейка A1 выбрана просто для удобства и последовательности. На самом деле, вы можете выбрать ячейку B1 и сослаться на B1, выбрать ячейку C1 и сослаться на C1, и т.д. Главное, что нужно сделать. указанная ячейка должен быть активная клетка .

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

    На скриншоте ниже выделена ячейка A7, значит, именованная формула должна иметь A7 в первом аргументе. Второй аргумент ($A$2) относится к регексу - эта ссылка должна оставаться постоянной, поэтому она закрыта знаком $.

    Выбран параметр "Игнорировать пустой

    При настройке пользовательского правила проверки данных важно снять флажок Игнорировать пустоту В противном случае правило не будет работать по следующей причине:

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

    Альтернативным решением является явное указание, что формула должна возвращать TRUE:

    =RegExpMatch(...)=TRUE

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

    Рабочая тетрадь для тренировок для скачивания

    Примеры валидации данных Regex (файл.xlsm)

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.