Съдържание
В урока е показано как да извършвате валидиране на данни в Excel, като използвате регулярни изрази с помощта на персонализирана функция RegexMatch.
Когато става въпрос за ограничаване на потребителския вход в работните листове на Excel, валидирането на данни е незаменимо. Искате да разрешите само числа или дати в дадена клетка? Или да ограничите текстовите стойности до определена дължина? Или може би да забраните времената извън даден диапазон? Няма проблем, всичко това може лесно да се направи с предварително зададени или персонализирани критерии за валидиране. Но какво, ако искам да разреша само валидни имейл адреси или низове, които отговарят наспецифичен модел? Уви, това не е възможно. Казвате Regex? Хм... това може да се получи!
Как да извършваме валидиране на данни в Excel с Regex
За съжаление нито една от вградените функции на Excel не поддържа регулярни изрази и Data Validation не прави изключение. За да можете да валидирате въведените данни в клетките с помощта на регулярни изрази, първо трябва да създадете потребителска функция Regex. Друго усложнение е, че дефинираните от потребителя функции във VBA не могат да се подават директно към Data Validation - необходим е посредник под формата на именувана формула.
Като се има предвид горното, нека накратко опишем стъпките, които трябва да се предприемат, за да се валидират данни в Excel с помощта на регекси:
- Създаване на потребителска функция Regex, която проверява дали дадена входна стойност отговаря на регулярен израз.
- Дефинирайте име за вашата формула Regex.
- Конфигурирайте правило за валидиране на данни въз основа на посочената формула.
- Копирайте настройките за валидиране в толкова клетки, колкото искате.
Звучи като план? Нека се опитаме да го приложим на практика!
Валидиране на данни в Excel с помощта на обичайни регулярни изрази
Този пример разглежда един много често срещан случай - как да разрешите само стойностите на определен шаблон.
Да предположим, че съхранявате някои кодове SKU в работния си лист и искате да сте сигурни, че само кодовете, които отговарят на даден модел, попадат в списъка. При условие че всеки код SKU се състои от 2 групи знаци, разделени с тире, като първата група включва 3 главни букви, а втората - 3 цифри, можете да идентифицирате такива стойности, като използвате посочения по-долу regex.
Модел : ^[A-Z]{3}-\d{3}$
Обърнете внимание, че началото (^) и краят ($) на низа са закотвени, така че в клетката не могат да бъдат въведени символи, различни от тези в шаблона.
1. Добавяне на потребителска функция Regex Match
Започнете с вмъкване на функцията RegExpMatch в работната си книга. Кодът вече е написан от нашите Excel гурута, така че просто трябва да го копирате от страницата, към която има връзка по-горе, и да го поставите във вашия VBA редактор.
Ето синтаксиса на функцията за справка:
RegExpMatch(текст, шаблон, [match_case])Къде:
- Текст (задължително) - низ на източника (в нашия контекст - валидирана клетка).
- Модел (задължително) - регулярен израз за съответствие.
- Match_case (незадължително) - тип на съвпадение. TRUE или пропуснато - чувствително към големи и малки букви; FALSE - нечувствително към големи и малки букви.
Съвет. Ако сте потребител на нашия Ultimate Suite, можете да извършвате Regex Data Validation в Excel, без да добавяте никакъв VBA код към работните си книги. Просто използвайте персонализирана функция AblebitsRegexMatch, включена в нашите Regex Tools.
2. Създайте именувана формула
В целевия работен лист изберете клетка A1 (независимо от съдържанието ѝ и от това коя клетка всъщност ще валидирате), натиснете Ctrl + F3, за да отворите мениджъра на имената, и задайте име за тази формула:
=RegExpMatch(Sheet1!A1, "^[A-Z]{3}-\d{3}$")
Или можете да въведете регекса в някоя клетка (A2 в този пример) и да зададете $A$2 като втори аргумент:
=RegExpMatch(Sheet1!A1, Sheet1!$A$2)
За да работи формулата правилно, не забравяйте да използвате относителна референция за текст аргумент (A1) и абсолютна референция за модел ($A$2).
Предвид факта, че нашата формула е предназначена за валидиране на номерата на SKU, ние я наричаме по съответния начин: Validate_SKU .
Важна забележка! Когато дефинирате формулата, проверете дали първият аргумент се отнася до текущо избраната клетка , в противен случай формулата няма да работи. Например, ако в листа е избрана клетка А1, поставете А1 в първия аргумент (според нашите препоръки); ако е избрана В2, тогава използвайте В2 за първия аргумент и т.н. Всъщност няма значение коя конкретна препратка използвате, стига тя да съответства на избраната в момента клетка.
За инструкции стъпка по стъпка вижте Как да създадем именувана формула в Excel.
3. Настройка на валидиране на данни
Изберете първата клетка, която трябва да бъде проверена (A5 в нашия случай), и създайте персонализирано правило за валидиране на данни въз основа на посочената формула. За целта направете следното:
- Кликнете върху Данни tab> Утвърждаване на данните .
- В Позволете от падащия списък, изберете Потребителски .
- Въведете следната формула в съответното поле.
=Validate_SKU
- Премахнете избора на Игнориране на празно място в противен случай правилото ви няма да работи.
По желание можете да въведете персонализирано съобщение за грешка, което да се показва при въвеждане на невалидни данни в клетка.
Ако смятате, че се нуждаете от подробни стъпки, ето ги тук: Как да настроите потребителско потвърждение на данните в Excel.
4. Копиране на валидирането на данните в повече клетки
За да копирате настройките за валидиране в повече клетки, трябва да направите следното:
- Изберете клетката с валидиране на данните и натиснете Ctrl + C, за да я копирате.
- Изберете други клетки, които искате да валидирате, щракнете върху тях с десния бутон на мишката, щракнете върху Специално поставяне и изберете Утвърждаване опция.
- Кликнете върху ОК .
Повече информация можете да намерите в Как да копирате валидиране на данни.
Сега всеки път, когато някой се опита да въведе невалиден SKU в някоя от валидираните клетки, ще се появява следното предупредително съобщение:
Валидиране на имейли с Regex
За да извършите валидиране на имейли, започвате с написването на регулярен израз, който съответства на имейл адрес.
Модел : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$
За подробно обяснение на синтаксиса, моля, вижте Regex за сравняване на валидни имейл адреси.
А сега задайте критериите за валидиране, като извършите вече познатите стъпки:
- Въведете горния регекс в B2.
- Изберете клетка A1 и дефинирайте име, наречено Validate_Email което се отнася до:
=RegExpMatch(Sheet1!A1, Sheet1!$B$2)
- За клетка B5 приложете персонализирано валидиране на данните, като използвате формулата по-долу. Игнориране на празно място опцията не трябва да бъде избрана.
=Validate_Email
Освен това можете да конфигурирате персонализирано съобщение за грешка, което да подкани потребителя да въведе валиден имейл адрес.
- Копирайте правилото в клетките по-долу.
Ако имейл адресът, който сте въвели в потвърдена клетка, не съответства на 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,}$
След като сте установили модела, можете да преминете към настройката за валидиране на данни:
- Въведете регекса на паролата си в C2.
- Изберете клетка A1 и създайте именувана формула, наречена Validate_Password :
=RegExpMatch(Sheet1!A1, Sheet1!$C$2)
- За клетка C5 създайте персонализирано правило за валидиране с формулата по-долу. Не забравяйте да премахнете избора на Игнориране на празно място квадратчето за отметка.
=Validate_Password
- Копирайте правилото в толкова клетки, колкото искате.
Сега можете спокойно да добавяте нови пароли към списъка. Ако входният низ не отговаря на regex, следното предупреждение ще ви напомни какви стойности се приемат:
Не работи валидирането на данни с речник
Ако Regex Data Validation не работи във вашия Excel, най-вероятно причината е една от следните.
Липсва функция RegExpMatch
Преди да приложите Data Validation, не забравяйте да въведете кода на функцията RegExpMatch в работната си книга.
Неправилен регулярен израз
За да се уверите, че вашият regex работи според очакванията, можете да въведете формулата RegExpMatch в някоя клетка и да проверите резултатите. За повече информация вижте раздел Excel Съвпадение на регулярни изрази с примери.
За да анализирате и отстранявате грешки в регулярните изрази, можете да използвате безплатни онлайн услуги за тестване на regex, като RegEx101 или RegExr.
Формула с грешно име
Много често срещана причина за неуспешно валидиране на данни е формула с име Regex, която се отнася до грешна клетка. Във всички примери препоръчахме да се дефинира формула, която се отнася до A1:
=RegExpMatch(A1, regex)
Това работи само ако клетката A1 е активен при дефиниране на име и относителна референция (без знака $).
Идеята е, че относителната препратка, посочена във формулата (A1), ще се промени автоматично в зависимост от относителната позиция на потвърдената клетка. С други думи, клетка A1 е избрана само за удобство и последователност. Всъщност можете да изберете клетка B1 и да препратите към B1, да изберете клетка C1 и да препратите към C1 и т.н. Ключовото нещо е, че референтна клетка трябва да бъде активна клетка .
За да проверите дали имената на формулите са правилни, изберете която и да е клетка в работния лист, отворете мениджъра на имената и вижте към коя клетка сочи формулата. Ако тя се отнася към текущо избраната клетка, формулата е правилна. В противен случай трябва да промените препратката в първия аргумент.
На скрийншота по-долу е избрана клетка A7, което означава, че именуваната формула трябва да съдържа A7 в първия аргумент. Вторият аргумент ($A$2) се отнася до регекса - тази препратка трябва да остане постоянна, затова е заключена със знака $.
Избрана е опцията за игнориране на празно място
Когато създавате персонализирано правило за валидиране на данни, е важно да премахнете избора на Игнориране на празно място В противен случай правилото няма да работи поради следната причина:
Ако не бъде намерено съвпадение, функцията RegExpMatch връща FALSE. Игнориране на празно място избрана опция, FALSE се равнява на празно и се игнорира.
Алтернативно решение е изрично да се посочи, че формулата трябва да връща TRUE:
=RegExpMatch(...)=TRUE
Това е начинът за валидиране на данни в Excel с помощта на регулярни изрази. Благодаря ви, че прочетохте, и с нетърпение очаквам да ви видя в нашия блог следващата седмица!
Практическа работна тетрадка за изтегляне
Примери за валидиране на данни с регекс (.xlsm файл)