Πίνακας περιεχομένων
Αυτό το σεμινάριο θα σας διδάξει πώς να διαχωρίζετε το κείμενο από τους αριθμούς στο Excel χρησιμοποιώντας εγγενείς τύπους και προσαρμοσμένες συναρτήσεις. Θα μάθετε επίσης πώς να χωρίζετε το κείμενο και τους αριθμούς σε δύο ξεχωριστές στήλες.
Φανταστείτε το εξής: λαμβάνετε ακατέργαστα δεδομένα για ανάλυση και ανακαλύπτετε ότι οι αριθμοί είναι αναμεμειγμένοι με κείμενο σε μία στήλη. Στις περισσότερες περιπτώσεις, θα ήταν σίγουρα πιο βολικό να τα έχετε σε ξεχωριστές στήλες για πιο προσεκτική εξέταση.
Σε περίπτωση που εργάζεστε με ομοιογενή δεδομένα, θα μπορούσατε πιθανώς να χρησιμοποιήσετε τις συναρτήσεις LEFT, RIGHT και MID για να εξάγετε τον ίδιο αριθμό χαρακτήρων από την ίδια θέση. Αλλά αυτό είναι ένα ιδανικό σενάριο για εργαστηριακές δοκιμές. Στην πραγματική ζωή, είναι πολύ πιθανό να έχετε να αντιμετωπίσετε ανόμοια δεδομένα, όπου οι αριθμοί έρχονται πριν από το κείμενο, μετά το κείμενο ή ανάμεσα στο κείμενο. Τα παρακάτω παραδείγματα παρέχουν λύσεις ακριβώς για αυτό το σκοπόπερίπτωση.
Πώς να αφαιρέσετε κείμενο και να διατηρήσετε αριθμούς σε κελιά του Excel
Η λύση λειτουργεί στο Excel 365, το Excel 2021 και το Excel 2019.
Το Microsoft Excel 2019 εισήγαγε μερικές νέες συναρτήσεις που δεν είναι διαθέσιμες σε προηγούμενες εκδόσεις και θα χρησιμοποιήσουμε μια από αυτές τις συναρτήσεις, δηλαδή την TEXTJOIN, για να αφαιρέσουμε χαρακτήρες κειμένου από ένα κελί που περιέχει αριθμούς.
Ο γενικός τύπος είναι:
TEXTJOIN("", TRUE, IFERROR(MID( κύτταρο , ROW(INDIRECT( "1:"&LEN( κύτταρο ))), 1) *1, ""))Στο Excel 365 και το 2021, αυτό θα λειτουργήσει επίσης:
TEXTJOIN("", TRUE, IFERROR(MID( κύτταρο , SEQUENCE(LEN( κύτταρο )), 1) *1, ""))Με την πρώτη ματιά, οι τύποι μπορεί να φαίνονται λίγο τρομακτικοί, αλλά λειτουργούν :)
Για παράδειγμα, για να αφαιρέσετε κείμενο από τους αριθμούς στο Α2, εισαγάγετε έναν από τους παρακάτω τύπους στο Β2 και, στη συνέχεια, αντιγράψτε τον σε όσα κελιά χρειάζεται.
Στο Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, "")))
Στο Excel 2019, πρέπει να εισαχθεί ως τύπος συστοιχίας με Ctrl + Shift + Enter . Στη δυναμική συστοιχία του Excel, λειτουργεί ως κανονικός τύπος που ολοκληρώνεται με το πλήκτρο Enter.
Στο Excel 365 και το 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Ως αποτέλεσμα, όλοι οι χαρακτήρες κειμένου αφαιρούνται από ένα κελί και οι αριθμοί διατηρούνται:
Πώς λειτουργεί αυτή η φόρμουλα:
Για να κατανοήσουμε καλύτερα τη λογική, ας αρχίσουμε να ερευνούμε τον τύπο από μέσα:
Χρησιμοποιείτε είτε ROW(INDIRECT("1:"&LEN(string))) είτε SEQUENCE(LEN(string)) για να δημιουργήσετε μια ακολουθία αριθμών που αντιστοιχεί στο συνολικό αριθμό των χαρακτήρων της αρχικής συμβολοσειράς, και στη συνέχεια τροφοδοτείτε αυτούς τους διαδοχικούς αριθμούς στη συνάρτηση MID ως αρχικούς αριθμούς. Στη Β2, αυτό το τμήμα του τύπου έχει ως εξής:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Η συνάρτηση MID εξάγει κάθε χαρακτήρα από το A2 ξεκινώντας από τον πρώτο και τον επιστρέφει ως πίνακα:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Αυτός ο πίνακας πολλαπλασιάζεται με 1. Οι αριθμητικές τιμές επιβιώνουν χωρίς αλλαγή, ενώ ο πολλαπλασιασμός ενός μη αριθμητικού χαρακτήρα οδηγεί σε σφάλμα #VALUE!:
{2;1;0;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!}
Η συνάρτηση IFERROR χειρίζεται αυτά τα σφάλματα και τα αντικαθιστά με κενές συμβολοσειρές:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Αυτός ο τελικός πίνακας παραδίδεται στη συνάρτηση TEXTJOIN, η οποία συνδέει τις μη κενές τιμές του πίνακα ( ignore_empty όρισμα σε TRUE) χρησιμοποιώντας ένα κενό αλφαριθμητικό ("") για τον διαχωριστή:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Συμβουλή. Για το Excel 2016 - 2007, υπάρχει επίσης μια λύση, αλλά ο τύπος είναι πολύ πιο πολύπλοκος. Μπορείτε να τη βρείτε σε αυτό το σεμινάριο: Πώς να εξάγετε αριθμούς στο Excel.
Προσαρμοσμένη λειτουργία για την αφαίρεση κειμένου από αριθμούς
Η λύση λειτουργεί για όλες τις εκδόσεις του Excel
Εάν χρησιμοποιείτε μια παλαιότερη έκδοση του Excel ή θεωρείτε ότι οι παραπάνω τύποι είναι πολύ δύσκολο να τους θυμάστε, τίποτα δεν σας εμποδίζει να δημιουργήσετε τη δική σας συνάρτηση με απλούστερη σύνταξη και ένα φιλικό προς το χρήστη όνομα, όπως RemoveText Η συνάρτηση που ορίζεται από τον χρήστη (UDF) μπορεί να γραφτεί με δύο τρόπους:
Κώδικας VBA 1:
Εδώ, εξετάζουμε έναν προς έναν κάθε χαρακτήρα στην αρχική συμβολοσειρά και ελέγχουμε αν είναι αριθμητικός ή όχι. Αν είναι αριθμός, ο χαρακτήρας προστίθεται στην προκύπτουσα συμβολοσειρά.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionΚώδικας VBA 2:
Ο κώδικας δημιουργεί ένα αντικείμενο για την επεξεργασία μιας κανονικής έκφρασης. Χρησιμοποιώντας την RegExp, αφαιρούμε όλους τους χαρακτήρες εκτός από τα ψηφία 0-9 από την αρχική συμβολοσειρά.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionΣε μικρά φύλλα εργασίας, και οι δύο κώδικες θα αποδώσουν εξίσου καλά. Σε μεγάλα φύλλα εργασίας όπου η συνάρτηση καλείται εκατοντάδες ή χιλιάδες φορές, ο κώδικας 2 που χρησιμοποιεί το VBScript.RegExp θα λειτουργήσει ταχύτερα.
Τα λεπτομερή βήματα για την εισαγωγή του κώδικα στο βιβλίο εργασίας σας μπορείτε να τα βρείτε εδώ: Πώς να εισαγάγετε κώδικα VBA στο Excel.
Όποια προσέγγιση και αν επιλέξετε, από την πλευρά του τελικού χρήστη, η λειτουργία για τη διαγραφή κειμένου και την αποχώρηση αριθμών είναι τόσο απλή όσο αυτή:
RemoveText(string)Για παράδειγμα, για να αφαιρέσετε μη αριθμητικούς χαρακτήρες από το κελί A2, ο τύπος στο B2 είναι:
=RemoveText(A2)
Απλά αντιγράψτε το στη στήλη και θα έχετε αυτό το αποτέλεσμα:
Σημείωση. Τόσο οι εγγενείς τύποι όσο και η προσαρμοσμένη συνάρτηση εξάγουν ένα αριθμητική συμβολοσειρά Για να το μετατρέψετε σε αριθμό, πολλαπλασιάστε το αποτέλεσμα με 1, ή προσθέστε μηδέν, ή τυλίξτε τον τύπο στη συνάρτηση VALUE. Για παράδειγμα:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Πώς να αφαιρέσετε αριθμούς από συμβολοσειρά κειμένου στο Excel
Η λύση λειτουργεί στο Excel 365, το Excel 2021 και το Excel 2019.
Οι τύποι για την αφαίρεση αριθμών από μια αλφαριθμητική συμβολοσειρά είναι λίγο πολύ παρόμοιοι με αυτούς που συζητήθηκαν στο προηγούμενο παράδειγμα.
Για το Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( κύτταρο , ROW(INDIRECT( "1:"&LEN( κύτταρο ) )), 1) *1), MID( κύτταρο , ROW(INDIRECT("1:"&LEN( κύτταρο ))), 1), ""))Στο Excel 2019, θυμηθείτε να το κάνετε ένα τύπος συστοιχίας πατώντας ταυτόχρονα τα πλήκτρα Ctrl + Shift + Enter.
Για το Excel 365 και το 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( κύτταρο , SEQUENCE(LEN( κύτταρο 1) *1), MID( κύτταρο , SEQUENCE(LEN( κύτταρο )), 1), ""))Για παράδειγμα, για να αφαιρέσετε αριθμούς από μια συμβολοσειρά στην Α2, ο τύπος είναι:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1), ""))
Ή
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2))), 1), ""))
Ως αποτέλεσμα, όλοι οι αριθμοί αφαιρούνται από ένα κελί και οι χαρακτήρες κειμένου διατηρούνται:
Όπως φαίνεται στο παραπάνω στιγμιότυπο, ο τύπος αφαιρεί αριθμητικούς χαρακτήρες από οποιαδήποτε θέση σε μια συμβολοσειρά: στην αρχή, στο τέλος και στη μέση. Ωστόσο, υπάρχει μια προειδοποίηση: αν μια συμβολοσειρά αρχίζει με έναν αριθμό ακολουθούμενο από ένα διάστημα , το κενό αυτό διατηρείται, γεγονός που δημιουργεί πρόβλημα με τα κενά που προηγούνται (όπως στο Β2).
Για να απαλλαγείτε από επιπλέον κενά πριν από το κείμενο , τυλίξτε τον τύπο στη συνάρτηση TRIM ως εξής:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
Τώρα, τα αποτελέσματά σας είναι απολύτως τέλεια!
Πώς λειτουργεί αυτή η φόρμουλα:
Στην ουσία, ο τύπος λειτουργεί με τον ίδιο τρόπο που εξηγήθηκε στο προηγούμενο παράδειγμα. Η διαφορά είναι ότι, από τον τελικό πίνακα που σερβίρεται στη συνάρτηση TEXTJOIN, πρέπει να αφαιρέσετε αριθμούς και όχι κείμενο. Για να γίνει αυτό, χρησιμοποιούμε το συνδυασμό των συναρτήσεων IF και ISERROR.
Όπως θυμάστε, το MID(...)+0 παράγει έναν πίνακα αριθμών και σφαλμάτων #VALUE! που αντιπροσωπεύουν χαρακτήρες κειμένου στις ίδιες θέσεις:
{2;1;0;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!;#ΑΞΊΑ!}
Η συνάρτηση ISERROR καταγράφει τα σφάλματα και μεταβιβάζει τον προκύπτοντα πίνακα τιμών Boolean στην IF:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Όταν η συνάρτηση IF βλέπει TRUE (σφάλμα), εισάγει τον αντίστοιχο χαρακτήρα κειμένου στον επεξεργασμένο πίνακα με τη βοήθεια μιας άλλης συνάρτησης MID. Όταν η συνάρτηση IF βλέπει FALSE (αριθμός), τον αντικαθιστά με ένα κενό αλφαριθμητικό:
{"";"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}
Αυτός ο τελικός πίνακας περνάει στο TEXTJOIN, ώστε να συνδέσει τους χαρακτήρες κειμένου και να εξάγει το αποτέλεσμα.
Προσαρμοσμένη λειτουργία για την αφαίρεση αριθμών από κείμενο
Η λύση λειτουργεί για όλες τις εκδόσεις του Excel
Έχοντας κατά νου ότι ένας ισχυρός τύπος πρέπει να διατηρείται απλός, θα μοιραστώ τον κώδικα της συνάρτησης που ορίζεται από τον χρήστη (UDF) για την αφαίρεση οποιουδήποτε αριθμητικού χαρακτήρα.
Κώδικας VBA 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionΚώδικας VBA 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionΌπως συμβαίνει και με τη συνάρτηση RemoveText, ο δεύτερος κώδικας είναι προτιμότερο να χρησιμοποιείται σε μεγάλα φύλλα εργασίας για τη βελτιστοποίηση της απόδοσης.
Μόλις ο κώδικας προστεθεί στο βιβλίο εργασίας σας, μπορείτε να αφαιρέσετε όλους τους αριθμητικούς χαρακτήρες από ένα κελί χρησιμοποιώντας αυτή την προσαρμοσμένη συνάρτηση:
RemoveNumbers(string)Στην περίπτωσή μας, ο τύπος στο Β2 είναι:
=RemoveNumbers(A2)
Για να κόψετε τα κενά που προηγούνται, αν υπάρχουν, τοποθετήστε την προσαρμοσμένη συνάρτηση μέσα στο TRIM όπως θα κάνατε σε έναν εγγενή τύπο:
=TRIM(RemoveNumbers(A2))
Διαχωρίστε αριθμούς και κείμενο σε ξεχωριστές στήλες
Σε περίπτωση που θέλετε να διαχωρίσετε κείμενο και αριθμούς σε δύο στήλες, θα ήταν ωραίο να κάνετε τη δουλειά σας με έναν μόνο τύπο, συμφωνείτε; Για το σκοπό αυτό, απλά συγχωνεύουμε τον κώδικα της φόρμουλας RemoveText και RemoveNumbers συναρτήσεις σε μία συνάρτηση, με το όνομα SplitTextNumbers , ή απλά Split , ή ό,τι άλλο θέλετε :)
Κώδικας VBA 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next If If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End If EndΛειτουργίαΚώδικας VBA 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function End FunctionΗ νέα μας προσαρμοσμένη συνάρτηση απαιτεί δύο ορίσματα:
SplitTextNumbers(string, is_remove_text)Πού is_remove_text είναι μια τιμή Boolean που υποδεικνύει ποιοι χαρακτήρες θα αφαιρεθούν:
- TRUE ή 1 - αφαίρεση κειμένου και διατήρηση αριθμών
- FALSE ή 0 - αφαιρεί τους αριθμούς και διατηρεί το κείμενο
Για το σύνολο δεδομένων του δείγματός μας, οι τύποι έχουν την εξής μορφή:
Για να αφαιρέσετε μη αριθμητικούς χαρακτήρες:
=SplitTextNumbers(A2, TRUE)
Για να διαγράψετε αριθμητικούς χαρακτήρες:
=SplitTextNumbers(A2, FALSE)
Συμβουλή. Για να αποφύγετε ένα πιθανό πρόβλημα με τα κενά στην αρχή, συνιστώ να τυλίγετε πάντα τον τύπο που αφαιρεί αριθμούς στη συνάρτηση TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Ειδικό εργαλείο για την αφαίρεση αριθμών ή κειμένου
Για όσους δεν τους αρέσει να περιπλέκουν τα πράγματα χωρίς λόγο, θα σας δείξω τον δικό μας τρόπο αφαίρεσης κειμένου ή αριθμών στο Excel.
Υποθέτοντας ότι η Ultimate Suite έχει προστεθεί στην κορδέλα του Excel, κάνετε τα εξής:
- Στο Δεδομένα Ablebits στην καρτέλα Κείμενο ομάδα, κάντε κλικ στο Αφαιρέστε το >, Αφαίρεση χαρακτήρων .
Συμβουλή: Εάν τα αποτελέσματα περιέχουν κάποια κενά στην αρχή, το εργαλείο Trim Spaces θα τα εξαλείψει σε χρόνο μηδέν.
Αυτός είναι ο τρόπος αφαίρεσης κειμένου ή αριθμητικών χαρακτήρων από μια συμβολοσειρά στο Excel. Σας ευχαριστώ για την ανάγνωση και ανυπομονώ να σας δω στο ιστολόγιό μας την επόμενη εβδομάδα!
Διαθέσιμες λήψεις
Αφαίρεση κειμένου ή αριθμών στο Excel - παραδείγματα (.xlsm αρχείο)
Ultimate Suite - δοκιμαστική έκδοση (.exe αρχείο)