Επικύρωση δεδομένων του Excel με χρήση κανονικών εκφράσεων (Regex)

  • Μοιραστείτε Αυτό
Michael Brown

Το σεμινάριο δείχνει πώς να κάνετε επικύρωση δεδομένων στο Excel χρησιμοποιώντας κανονικές εκφράσεις με τη βοήθεια μιας προσαρμοσμένης συνάρτησης RegexMatch.

Όταν πρόκειται για τον περιορισμό της εισόδου του χρήστη σε φύλλα εργασίας του Excel, η Επικύρωση δεδομένων είναι απαραίτητη. Θέλετε να επιτρέψετε μόνο αριθμούς ή ημερομηνίες σε ένα συγκεκριμένο κελί; Ή να περιορίσετε τις τιμές κειμένου σε ένα συγκεκριμένο μήκος; Ή ίσως να μην επιτρέψετε χρόνους εκτός ενός συγκεκριμένου εύρους; Κανένα πρόβλημα, όλα αυτά μπορούν να γίνουν εύκολα με προκαθορισμένα ή προσαρμοσμένα κριτήρια επικύρωσης. Τι γίνεται όμως αν θέλω να επιτρέψω μόνο έγκυρες διευθύνσεις ηλεκτρονικού ταχυδρομείου ή συμβολοσειρές που ταιριάζουν με ένασυγκεκριμένο μοτίβο; Δυστυχώς, αυτό δεν είναι δυνατό. Regex λέτε; Χμμ... αυτό μπορεί να λειτουργήσει!

    Πώς να κάνετε επικύρωση δεδομένων του Excel με Regex

    Δυστυχώς, καμία από τις ενσωματωμένες λειτουργίες του Excel δεν υποστηρίζει regexes, και η Επικύρωση δεδομένων δεν αποτελεί εξαίρεση. Για να μπορέσετε να επικυρώσετε την είσοδο κελιών χρησιμοποιώντας κανονικές εκφράσεις, πρέπει πρώτα να δημιουργήσετε μια προσαρμοσμένη συνάρτηση Regex. Μια άλλη επιπλοκή είναι ότι οι συναρτήσεις που ορίζονται από τον χρήστη της VBA δεν μπορούν να εξυπηρετηθούν απευθείας στην Επικύρωση δεδομένων - θα χρειαστείτε έναν μεσολαβητή με τη μορφή ενός ονομαστικού τύπου.

    Λαμβάνοντας υπόψη τα παραπάνω, ας περιγράψουμε εν συντομία τα βήματα που πρέπει να ακολουθηθούν για την επικύρωση δεδομένων στο Excel με τη χρήση regexes:

    1. Δημιουργήστε μια προσαρμοσμένη συνάρτηση Regex που ελέγχει αν μια τιμή εισόδου ταιριάζει με μια κανονική έκφραση.
    2. Ορίστε ένα όνομα για τον τύπο Regex.
    3. Διαμορφώστε έναν κανόνα επικύρωσης δεδομένων με βάση τον τύπο που ονομάστηκε.
    4. Αντιγράψτε τις ρυθμίσεις επικύρωσης σε όσα κελιά θέλετε.

    Ακούγεται σαν σχέδιο; Ας προσπαθήσουμε να το εφαρμόσουμε στην πράξη!

    Επικύρωση δεδομένων του Excel με τη χρήση προσαρμοσμένων κανονικών εκφράσεων

    Αυτό το παράδειγμα αφορά μια πολύ συνηθισμένη περίπτωση - πώς να επιτρέπετε μόνο τις τιμές ενός συγκεκριμένου προτύπου.

    Ας υποθέσουμε ότι διατηρείτε ορισμένους κωδικούς SKU στο φύλλο εργασίας σας και θέλετε να είστε βέβαιοι ότι μόνο οι κωδικοί που ταιριάζουν σε ένα συγκεκριμένο μοτίβο μπαίνουν στη λίστα. Με την προϋπόθεση ότι κάθε SKU αποτελείται από 2 ομάδες χαρακτήρων που χωρίζονται με παύλα, η πρώτη ομάδα περιλαμβάνει 3 κεφαλαία γράμματα και η δεύτερη ομάδα - 3 ψηφία, μπορείτε να εντοπίσετε τέτοιες τιμές χρησιμοποιώντας την παρακάτω regex.

    Μοτίβο : ^[A-Z]{3}-\d{3}$

    Σημειώστε ότι η αρχή (^) και το τέλος ($) της συμβολοσειράς είναι αγκυροβολημένα, οπότε δεν μπορούν να εισαχθούν σε ένα κελί άλλοι χαρακτήρες εκτός από το μοτίβο.

    1. Προσθέστε μια προσαρμοσμένη λειτουργία Regex Match

    Ξεκινήστε με την εισαγωγή της συνάρτησης RegExpMatch στο βιβλίο εργασίας σας. Ο κώδικας έχει ήδη γραφτεί από τους γκουρού του Excel, οπότε αρκεί να τον αντιγράψετε από την παραπάνω σελίδα που παραπέμπει και να τον επικολλήσετε στον επεξεργαστή VBA.

    Ακολουθεί η σύνταξη της συνάρτησης για την αναφορά σας:

    RegExpMatch(text, pattern, [match_case])

    Πού:

    • Κείμενο (υποχρεωτικό) - μια συμβολοσειρά πηγής (στο δικό μας πλαίσιο - ένα επικυρωμένο κελί).
    • Μοτίβο (υποχρεωτικό) - μια κανονική έκφραση που θα ταιριάζει.
    • 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. Κάντε κλικ στο Δεδομένα tab>, Επικύρωση δεδομένων .
    2. Στο Επιτρέψτε το αναπτυσσόμενη λίστα, επιλέξτε Προσαρμοσμένο .
    3. Εισάγετε τον παρακάτω τύπο στο αντίστοιχο πλαίσιο.

      =Validate_SKU

    4. Αποεπιλέξτε το Αγνοήστε το κενό επιλογή, διαφορετικά ο κανόνας σας δεν θα λειτουργήσει.

    Προαιρετικά, μπορείτε να πληκτρολογήσετε ένα προσαρμοσμένο μήνυμα σφάλματος που θα εμφανίζεται όταν εισάγονται μη έγκυρα δεδομένα σε ένα κελί.

    Αν αισθάνεστε ότι χρειάζεστε τα λεπτομερή βήματα, ορίστε: Πώς να ρυθμίσετε προσαρμοσμένη επικύρωση δεδομένων στο Excel.

    4. Αντιγραφή της επικύρωσης δεδομένων σε περισσότερα κελιά

    Για να αντιγράψετε τις ρυθμίσεις επικύρωσης σε περισσότερα κελιά, πρέπει να κάνετε τα εξής:

    1. Επιλέξτε το κελί με την επικύρωση δεδομένων και πατήστε Ctrl + C για να το αντιγράψετε.
    2. Επιλέξτε άλλα κελιά που θέλετε να επικυρώσετε, κάντε δεξιό κλικ σε αυτά, κάντε κλικ στην επιλογή Ειδική επικόλληση , και επιλέξτε το Επικύρωση επιλογή.
    3. Κάντε κλικ στο OK .

    Περισσότερες πληροφορίες μπορείτε να βρείτε στην ενότητα Πώς να αντιγράψετε την επικύρωση δεδομένων.

    Τώρα, κάθε φορά που κάποιος προσπαθεί να εισάγει μια άκυρη SKU σε οποιοδήποτε από τα επικυρωμένα κελιά, θα εμφανίζεται το ακόλουθο προειδοποιητικό μήνυμα:

    Επικύρωση email με Regex

    Για να εκτελέσετε επικύρωση email, ξεκινάτε με τη σύνταξη μιας κανονικής έκφρασης που ταιριάζει με μια διεύθυνση email.

    Μοτίβο : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$

    Για την αναλυτική επεξήγηση της σύνταξης, ανατρέξτε στην ενότητα Regex για την αντιστοίχιση έγκυρων διευθύνσεων ηλεκτρονικού ταχυδρομείου.

    Και τώρα, καθορίστε τα κριτήρια επικύρωσης εκτελώντας τα ήδη γνωστά βήματα:

    1. Εισάγετε την παραπάνω regex στο B2.
    2. Επιλέξτε το κελί Α1 και ορίστε ένα όνομα που ονομάζεται 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. Πληκτρολογήστε το regex του κωδικού σας στο C2.
    2. Επιλέξτε το κελί A1 και δημιουργήστε έναν τύπο με όνομα που ονομάζεται Validate_Password (Επικύρωση_Κωδικού) :

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

    3. Για το κελί C5, δημιουργήστε έναν προσαρμοσμένο κανόνα επικύρωσης με τον παρακάτω τύπο. Θυμηθείτε να αποεπιλέξετε το Αγνοήστε το κενό πλαίσιο ελέγχου.

      =Validate_Password

    4. Αντιγράψτε τον κανόνα σε όσα κελιά θέλετε.

    Τώρα, μπορείτε να προσθέσετε με ασφάλεια νέους κωδικούς πρόσβασης στη λίστα. Εάν μια συμβολοσειρά εισόδου δεν ταιριάζει με το regex, η ακόλουθη ειδοποίηση θα σας υπενθυμίσει τι είδους τιμές είναι αποδεκτές:

    Η επικύρωση δεδομένων Regex δεν λειτουργεί

    Εάν η επικύρωση δεδομένων Regex δεν λειτουργεί στο Excel σας, πιθανότατα οφείλεται σε έναν από τους ακόλουθους λόγους.

    Λείπει η λειτουργία RegExpMatch

    Πριν εφαρμόσετε την Επικύρωση δεδομένων, φροντίστε να εισαγάγετε τον κώδικα της συνάρτησης RegExpMatch στο βιβλίο εργασίας σας.

    Λανθασμένη κανονική έκφραση

    Για να βεβαιωθείτε ότι η regex σας λειτουργεί όπως αναμένεται, μπορείτε να εισαγάγετε έναν τύπο RegExpMatch σε κάποιο κελί και να εξετάσετε τα αποτελέσματα. Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα Αντιστοίχιση κανονικών εκφράσεων του Excel με παραδείγματα.

    Για να αναλύσετε και να διορθώσετε τις κανονικές εκφράσεις σας, μπορείτε να χρησιμοποιήσετε δωρεάν διαδικτυακές υπηρεσίες ελέγχου regex, όπως το RegEx101 ή το RegExr.

    Λανθασμένη φόρμουλα με όνομα

    Ένας πολύ συνηθισμένος λόγος αποτυχίας της επικύρωσης δεδομένων είναι ένας τύπος με όνομα Regex που αναφέρεται σε λάθος κελί. Σε όλα τα παραδείγματα, συνιστούμε να ορίσετε έναν τύπο που αναφέρεται στο A1:

    =RegExpMatch(A1, regex)

    Αυτό λειτουργεί μόνο αν το κελί Το A1 είναι ενεργό κατά τον ορισμό ενός ονόματος και ενός σχετική αναφορά (χωρίς το σύμβολο $) χρησιμοποιείται.

    Η ιδέα είναι ότι μια σχετική αναφορά που καθορίζεται στον τύπο (Α1) θα αλλάξει αυτόματα με βάση τη σχετική θέση του επικυρωμένου κελιού. Με άλλα λόγια, το κελί Α1 επιλέγεται μόνο για λόγους ευκολίας και συνέπειας. Στην πραγματικότητα, μπορείτε να επιλέξετε το κελί Β1 και να αναφερθείτε στο Β1, να επιλέξετε το κελί Γ1 και να αναφερθείτε στο Γ1 κ.ο.κ. Το βασικό είναι ότι η αναφερόμενο κελί θα πρέπει να είναι η ενεργό κύτταρο .

    Για να ελέγξετε αν ο τύπος με όνομα είναι σωστός, επιλέξτε οποιοδήποτε κελί στο φύλλο εργασίας σας, ανοίξτε τη Διαχείριση ονομάτων και δείτε σε ποιο κελί δείχνει ο τύπος. Αν αναφέρεται στο τρέχον επιλεγμένο κελί, ο τύπος είναι σωστός. Διαφορετικά, θα πρέπει να αλλάξετε την αναφορά στο πρώτο όρισμα.

    Στο παρακάτω στιγμιότυπο οθόνης, το κελί A7 είναι επιλεγμένο, πράγμα που σημαίνει ότι ένας τύπος με όνομα θα πρέπει να έχει A7 στο πρώτο όρισμα. Το δεύτερο όρισμα ($A$2) αναφέρεται στην regex - αυτή η αναφορά υποτίθεται ότι πρέπει να παραμείνει σταθερή, οπότε κλειδώνεται με το σύμβολο $.

    Επιλογή Ignore blank επιλεγμένη

    Κατά τη δημιουργία ενός προσαρμοσμένου κανόνα επικύρωσης δεδομένων, είναι σημαντικό να καταργήσετε την επιλογή του Αγνοήστε το κενό Διαφορετικά, ο κανόνας δεν θα λειτουργήσει για τον ακόλουθο λόγο:

    Εάν δεν βρεθεί αντιστοιχία, η συνάρτηση RegExpMatch επιστρέφει FALSE. Με τη συνάρτηση Αγνοήστε το κενό επιλεγμένη, το FALSE ισοδυναμεί με κενό και αγνοείται.

    Μια εναλλακτική λύση είναι να δηλώνετε ρητά ότι ο τύπος πρέπει να επιστρέφει TRUE:

    =RegExpMatch(...)=TRUE

    Αυτός είναι ο τρόπος με τον οποίο μπορείτε να κάνετε Επικύρωση δεδομένων στο Excel χρησιμοποιώντας κανονικές εκφράσεις. Σας ευχαριστώ για την ανάγνωση και ανυπομονώ να σας δω στο blog μας την επόμενη εβδομάδα!

    Βιβλίο ασκήσεων για κατέβασμα

    Παραδείγματα επικύρωσης δεδομένων Regex (.xlsm αρχείο)

    Ο Michael Brown είναι ένας αφοσιωμένος λάτρης της τεχνολογίας με πάθος για την απλοποίηση πολύπλοκων διαδικασιών χρησιμοποιώντας εργαλεία λογισμικού. Με περισσότερο από μια δεκαετία εμπειρίας στον κλάδο της τεχνολογίας, έχει βελτιώσει τις δεξιότητές του στο Microsoft Excel και το Outlook, καθώς και στα Φύλλα Google και στα Έγγραφα. Το blog του Michael είναι αφιερωμένο στο να μοιράζεται τη γνώση και την τεχνογνωσία του με άλλους, παρέχοντας εύκολες συμβουλές και σεμινάρια για τη βελτίωση της παραγωγικότητας και της αποτελεσματικότητας. Είτε είστε έμπειρος επαγγελματίας είτε αρχάριος, το ιστολόγιο του Michael προσφέρει πολύτιμες πληροφορίες και πρακτικές συμβουλές για να αξιοποιήσετε στο έπακρο αυτά τα βασικά εργαλεία λογισμικού.