Πίνακας περιεχομένων
Θέλετε να χειριστείτε τα κενά διαστήματα με τον πιο αποτελεσματικό τρόπο; Χρησιμοποιήστε κανονικές εκφράσεις για να αφαιρέσετε όλα τα κενά διαστήματα σε ένα κελί, να αντικαταστήσετε πολλαπλά κενά διαστήματα με έναν μόνο χαρακτήρα, να κόψετε τα κενά διαστήματα μόνο μεταξύ αριθμών και πολλά άλλα.
Όποια δεδομένα εισόδου και αν χρησιμοποιείτε, δύσκολα θα συναντήσετε ένα σύνολο δεδομένων χωρίς κενά. Στις περισσότερες περιπτώσεις, το κενό διάστημα είναι καλό - το χρησιμοποιείτε για να διαχωρίσετε οπτικά τα διάφορα κομμάτια πληροφοριών ώστε να γίνουν πιο εύκολα αντιληπτά. Σε ορισμένες περιπτώσεις, ωστόσο, μπορεί να γίνει κακό - τα επιπλέον κενά μπορούν να μπερδέψουν τους τύπους σας και να κάνουν τα φύλλα εργασίας σας σχεδόν μη διαχειρίσιμα.
Γιατί να χρησιμοποιήσετε την κανονική έκφραση για την περικοπή των κενών διαστημάτων στο Excel;
Πριν ασχοληθούμε με τη χρήση των κανονικών εκφράσεων για την αφαίρεση των κενών διαστημάτων σε φύλλα εργασίας του Excel, θα ήθελα να απαντήσω στην ερώτηση που έρχεται στο μυαλό μας αρχικά - γιατί χρειαζόμαστε τις regexes όταν το Excel διαθέτει ήδη τη συνάρτηση TRIM;
Για να καταλάβετε τη διαφορά, ας δούμε τι θεωρείται κενό διάστημα σε κάθε περίπτωση:
- Η ενσωματωμένη συνάρτηση TRIM μπορεί να αφαιρέσει μόνο το χαρακτήρας διαστήματος που έχει τιμή 32 στο σύστημα ASCII των 7 bit.
- Οι κανονικές εκφράσεις μπορούν να αναγνωρίσουν μερικές διαφορετικές μορφές κενών διαστημάτων, όπως το κενό ( ), το tab (\t), το carriage return (\r), και η νέα γραμμή (\n). Επιπλέον, υπάρχει το χαρακτήρας λευκού διαστήματος (\s) που ταιριάζει σε όλους αυτούς τους τύπους και είναι εξαιρετικά χρήσιμος για τον καθαρισμό των ακατέργαστων δεδομένων εισόδου.
Γνωρίζοντας ακριβώς τι συμβαίνει στο παρασκήνιο, είναι πολύ πιο εύκολο να βρούμε μια λύση, σωστά;
Πώς να ενεργοποιήσετε τις κανονικές εκφράσεις στο Excel
Είναι γνωστό ότι το έτοιμο Excel δεν υποστηρίζει τις κανονικές εκφράσεις. Για να τις ενεργοποιήσετε, πρέπει να δημιουργήσετε μια προσαρμοσμένη συνάρτηση VBA. Ευτυχώς, έχουμε ήδη μια, με το όνομα RegExpReplace Περίμενε, γιατί "αντικαταστήστε" ενώ μιλάμε για αφαίρεση; Στη γλώσσα του Excel, η "αφαίρεση" είναι απλώς μια άλλη λέξη για την "αντικατάσταση με κενή συμβολοσειρά" :)
Για να προσθέσετε τη συνάρτηση στο Excel σας, απλώς αντιγράψτε τον κώδικά της από αυτή τη σελίδα, επικολλήστε τον στον επεξεργαστή VBA και αποθηκεύστε το αρχείο σας ως βιβλίο εργασίας με δυνατότητα μακροεντολών (.xlsm).
Ακολουθεί η σύνταξη της συνάρτησης για την αναφορά σας:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Τα τρία πρώτα ορίσματα είναι υποχρεωτικά, ενώ τα δύο τελευταία είναι προαιρετικά.
Πού:
- Κείμενο - το αρχικό αλφαριθμητικό για αναζήτηση.
- Μοτίβο - το regex για αναζήτηση.
- Αντικατάσταση - το κείμενο που θα αντικατασταθεί με. αφαιρέστε το κενά διαστήματα , θα ορίζατε αυτό το επιχείρημα είτε:
- κενή συμβολοσειρά ("") για να κόψετε όλα τα κενά
- χώρος χαρακτήρας (" ") για να αντικαταστήσετε πολλαπλά κενά με έναν μόνο χαρακτήρα κενό
- Instance_num (προαιρετικό) - ο αριθμός της περίπτωσης. Στις περισσότερες περιπτώσεις, θα το παραλείψετε για να αντικαταστήσετε όλες τις περιπτώσεις (προεπιλογή).
- Match_case (προαιρετικό) - μια τιμή Boolean που υποδεικνύει αν θα ταιριάζει (TRUE) ή θα αγνοεί (FALSE) την πεζότητα του κειμένου. Για το κενό διάστημα, δεν έχει σημασία και συνεπώς παραλείπεται.
Για περισσότερες πληροφορίες, ανατρέξτε στη λειτουργία RegExpReplace.
Πώς να αφαιρέσετε κενά με regex - παραδείγματα
Με τη συνάρτηση RegExpReplace να έχει προστεθεί στο βιβλίο εργασίας σας, ας εξετάσουμε ένα προς ένα διαφορετικά σενάρια.
Αφαίρεση όλων των λευκών κενών με χρήση regex
Για να αφαιρέσετε όλα τα κενά σε μια συμβολοσειρά, απλά αναζητάτε οποιονδήποτε χαρακτήρα λευκού χώρου, συμπεριλαμβανομένου του κενού διαστήματος, του tab, του carriage return και του line feed, και τα αντικαθιστάτε με μια κενή συμβολοσειρά ("").
Μοτίβο : \s+
Αντικατάσταση : ""
Υποθέτοντας ότι η συμβολοσειρά προέλευσης βρίσκεται στο Α5, ο τύπος στο Β5 είναι:
=RegExpReplace(A5, "\s+", "")
Για να διευκολύνετε τη διαχείριση των μοτίβων σας, μπορείτε να εισαγάγετε το regex σε ένα προκαθορισμένο κελί και να το παρέχετε στον τύπο χρησιμοποιώντας μια απόλυτη αναφορά όπως $A$2, έτσι ώστε η διεύθυνση του κελιού να παραμείνει αμετάβλητη κατά την αντιγραφή του τύπου προς τα κάτω στη στήλη.
=RegExpReplace(A5, $A$2, "")
Αφαιρέστε περισσότερα από ένα κενά διαστήματα
Για να αφαιρέσετε επιπλέον κενό διάστημα (δηλ. περισσότερα από ένα διαδοχικά κενά), χρησιμοποιήστε το ίδιο regex \s+, αλλά αντικαταστήστε τις αντιστοιχίες που βρέθηκαν με έναν μόνο χαρακτήρα κενό.
Μοτίβο : \s+
Αντικατάσταση : " "
=RegExpReplace(A5, "\s+", " ")
Προσέξτε ότι αυτός ο τύπος διατηρεί έναν χαρακτήρα κενού χώρου όχι μόνο μεταξύ των λέξεων αλλά και στην αρχή και στο τέλος μιας συμβολοσειράς, πράγμα που δεν είναι καλό. Για να απαλλαγείτε από τα λευκά κενά στην αρχή και στο τέλος, ενσωματώστε τον παραπάνω τύπο σε μια άλλη συνάρτηση RegExpReplace που αφαιρεί τα κενά από την αρχή και το τέλος:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
Regex για την αφαίρεση του αρχικού και του τελικού λευκού χώρου
Για να αναζητήσετε κενά στην αρχή ή στο τέλος μιας γραμμής, χρησιμοποιήστε τις αγκυρώσεις αρχής ^ και τέλους $.
Οδηγός κενό διάστημα:
Μοτίβο : ^[\s]+
Πίσω κενό διάστημα:
Μοτίβο : [\s]+$
Οδηγός και πίσω κενό διάστημα:
Μοτίβο : ^[\s]+
Όποια regex και αν επιλέξετε, αντικαταστήστε τα αποτελέσματα με τίποτα.
Αντικατάσταση : ""
Για παράδειγμα, για να εξαλείψετε όλα τα κενά στην αρχή και στο τέλος μιας συμβολοσειράς στο Α5, ο τύπος είναι ο εξής:
=RegExpReplace(A5, "^[\s]+
Όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης, αυτό αφαιρεί μόνο τα λευκά κενά που προηγούνται και ακολουθούν. Τα κενά μεταξύ των λέξεων παραμένουν άθικτα, δημιουργώντας μια οπτικά ευχάριστη εικόνα για το μάτι του αναγνώστη.
Αφαιρέστε το επιπλέον κενό διάστημα αλλά διατηρήστε τα διαλείμματα γραμμής
Όταν εργάζεστε με συμβολοσειρές πολλαπλών γραμμών, μπορεί να θέλετε να απαλλαγείτε από τα επιπλέον κενά αλλά να διατηρήσετε τα διαλείμματα γραμμής. Για να γίνει αυτό, αντί για τον χαρακτήρα κενών \s, αναζητήστε κενά [ ] ή κενά και ταμπέλες [\t ]. Το τελευταίο μοτίβο είναι χρήσιμο όταν τα δεδομένα της πηγής σας εισάγονται από άλλη πηγή, π.χ. από έναν επεξεργαστή κειμένου.
Στο παρακάτω σύνολο δεδομένων, ας υποθέσουμε ότι θέλετε να κόψετε όλα τα κενά στην αρχή/στο τέλος και όλα τα ενδιάμεσα κενά εκτός από ένα, διατηρώντας άθικτες τις πολλαπλές γραμμές. Για την εκπλήρωση της αποστολής, θα χρειαστείτε δύο διαφορετικές συναρτήσεις RegExpReplace.
Η πρώτη συνάρτηση αντικαθιστά πολλαπλά κενά με έναν μόνο χαρακτήρα κενό.
=RegExpReplace(A5, " +", " ")
Η άλλη αφαιρεί τα κενά από την αρχή και το τέλος μιας γραμμής:
=RegExpReplace(A5, "^ +
Απλά φωλιάστε τις δύο συναρτήσεις η μία μέσα στην άλλη:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +
Και θα έχετε ένα τέλειο αποτέλεσμα:
Regex για την αντικατάσταση πολλαπλών διαστημάτων με έναν χαρακτήρα
Σε περίπτωση που θέλετε να αφαιρέσετε όλα τα κενά από μια συμβολοσειρά και να αντικαταστήσετε κάθε ομάδα διαδοχικών κενών με έναν συγκεκριμένο χαρακτήρα, πρέπει να κάνετε το εξής:
Πρώτον, χρησιμοποιήστε αυτή τη regex για να κόψετε τα λευκά κενά στην αρχή και στο τέλος:
=RegExpReplace(A8, "^[\s]+
Στη συνέχεια, σερβίρετε την παραπάνω λειτουργία στο κείμενο όρισμα ενός άλλου RegExpReplace που αντικαθιστά ένα ή περισσότερα διαδοχικά κενά διαστήματα με τον χαρακτήρα που καθορίζετε, π.χ. μια παύλα:
Μοτίβο : \s+
Αντικατάσταση : -
Αν υποθέσουμε ότι η συμβολοσειρά προέλευσης βρίσκεται στο A8, ο τύπος παίρνει την εξής μορφή:
=RegExpReplace(RegExpReplace(A8, "^[\s]+
Ή μπορείτε να εισάγετε τα μοτίβα και τις αντικαταστάσεις σε ξεχωριστά κελιά, όπως φαίνεται στο στιγμιότυπο οθόνης:
Regex για την αφαίρεση κενών γραμμών
Ακολουθεί μια ερώτηση που κάνουν συχνά οι χρήστες που έχουν πολλές γραμμές σε ένα κελί: "Υπάρχουν πολλές κενές γραμμές στα κελιά μου. Υπάρχει κάποιος άλλος τρόπος να απαλλαγώ από αυτές εκτός από το να περάσω από κάθε κελί και να διαγράψω κάθε γραμμή χειροκίνητα;" Η απάντηση: Αυτό είναι εύκολο!
Για να ταιριάξετε κενές γραμμές που δεν έχουν ούτε έναν χαρακτήρα από την αρχή ^ της τρέχουσας γραμμής μέχρι την επόμενη γραμμή \n, η regex είναι:
Μοτίβο : ^\n
Εάν οι οπτικά κενές γραμμές σας περιέχουν κενά ή καρτέλες, χρησιμοποιήστε αυτή την κανονική έκφραση:
Μοτίβο : ^[\t ]*\n
Απλά αντικαταστήστε την regex με μια κενή συμβολοσειρά χρησιμοποιώντας αυτόν τον τύπο, και όλες οι κενές γραμμές θα εξαφανιστούν αμέσως!
=RegExpReplace(A5, $A$2, "")
Αφαίρεση κενών διαστημάτων με εργαλεία RegEx
Τα παραπάνω παραδείγματα έδειξαν μόνο ένα μικρό μέρος των θαυμάσιων δυνατοτήτων που παρέχουν οι regexes. Δυστυχώς, δεν είναι διαθέσιμες όλες οι δυνατότητες των κλασικών κανονικών εκφράσεων στην VBA.
Ευτυχώς, τα εργαλεία RegEx που περιλαμβάνονται στην Ultimate Suite δεν έχουν αυτούς τους περιορισμούς, καθώς η επεξεργασία τους γίνεται από τη μηχανή RegEx .NET της Microsoft. Αυτό σας επιτρέπει να κατασκευάσετε πιο περίπλοκα μοτίβα που δεν υποστηρίζονται από το VBA RegExp. Παρακάτω θα βρείτε ένα παράδειγμα μιας τέτοιας κανονικής έκφρασης.
Regex για την αφαίρεση του διαστήματος μεταξύ των αριθμών
Σε μια αλφαριθμητική συμβολοσειρά, ας υποθέσουμε ότι θέλετε να αφαιρέσετε τα κενά μεταξύ των αριθμών μόνο, έτσι ώστε μια συμβολοσειρά όπως "A 1 2 B" να γίνει "A 12 B".
Για να ταιριάξετε ένα κενό διάστημα μεταξύ δύο οποιωνδήποτε ψηφίων, μπορείτε να χρησιμοποιήσετε τις ακόλουθες εναλλακτικές λύσεις:
Μοτίβο : (?<=\d)\s+(?=\d)
Για να δημιουργήσετε έναν τύπο με βάση τα παραπάνω regexes, ακολουθούν δύο εύκολα βήματα:
- Στο Δεδομένα Ablebits στην καρτέλα Κείμενο ομάδα, κάντε κλικ στο Εργαλεία Regex .
- Στο Εργαλεία Regex παράθυρο, επιλέξτε τα δεδομένα πηγής, εισαγάγετε το regex σας, επιλέξτε το Αφαιρέστε το και πατήστε το πλήκτρο Αφαιρέστε το .
Για να λάβετε τα αποτελέσματα ως τύπους και όχι ως τιμές, θυμηθείτε να βάλετε ένα τικ στο πεδίο Εισαγωγή ως τύπος πλαίσιο ελέγχου.
Σε λίγο, θα δείτε το AblebitsRegexRemove που εισάγεται σε μια νέα στήλη στα δεξιά των αρχικών δεδομένων.
Εναλλακτικά, μπορείτε να εισαγάγετε το regex σε κάποιο κελί, π.χ. A5, και να εισαγάγετε τον τύπο απευθείας σε ένα κελί χρησιμοποιώντας την εντολή Λειτουργία εισαγωγής παράθυρο διαλόγου, όπου AblebitsRegexRemove κατηγοριοποιείται στην κατηγορία AblebitsUDFs .
Καθώς αυτή η συνάρτηση είναι ειδικά σχεδιασμένη για την αφαίρεση συμβολοσειρών, απαιτεί μόνο δύο ορίσματα - τη συμβολοσειρά εισόδου και το regex:
=AblebitsRegexRemove(A5, $A$2)
Αυτός είναι ο τρόπος αφαίρεσης κενών στο Excel χρησιμοποιώντας κανονικές εκφράσεις. Σας ευχαριστώ για την ανάγνωση και ανυπομονώ να σας δω στο blog μας την επόμενη εβδομάδα!
Διαθέσιμες λήψεις
Αφαίρεση κενών διαστημάτων με regex - παραδείγματα (.xlsm αρχείο)
Ultimate Suite - δοκιμαστική έκδοση (.exe αρχείο)