Excel: Εξαγωγή αριθμού από συμβολοσειρά κειμένου

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

Το σεμινάριο δείχνει πώς να εξάγετε αριθμό από διάφορες συμβολοσειρές κειμένου στο Excel χρησιμοποιώντας τύπους και το εργαλείο Extract.

Όταν πρόκειται για την εξαγωγή μέρους μιας συμβολοσειράς κειμένου συγκεκριμένου μήκους, το Excel παρέχει τρεις συναρτήσεις Substring (Αριστερά, Δεξιά και Μέση) για τη γρήγορη διεκπεραίωση της εργασίας. Όταν πρόκειται για την εξαγωγή αριθμών από μια αλφαριθμητική συμβολοσειρά, το Microsoft Excel δεν παρέχει... τίποτα.

Για να λάβετε έναν αριθμό από μια συμβολοσειρά στο Excel, χρειάζεται λίγη εφευρετικότητα, λίγη υπομονή και ένα σωρό διαφορετικές συναρτήσεις που εμφωλεύουν η μία στην άλλη. Ή, μπορείτε να εκτελέσετε το εργαλείο Extract και να κάνετε τη δουλειά με ένα κλικ του ποντικιού. Παρακάτω θα βρείτε πλήρεις λεπτομέρειες και για τις δύο μεθόδους.

    Πώς να εξαγάγετε αριθμό από το τέλος της συμβολοσειράς κειμένου

    Όταν έχετε μια στήλη με αλφαριθμητικές συμβολοσειρές όπου ο αριθμός ακολουθεί το κείμενο, μπορείτε να χρησιμοποιήσετε τον ακόλουθο τύπο για να τον λάβετε.

    RIGHT( κύτταρο , LEN( κύτταρο ) - MAX(IF(ISNUMBER(MID( κύτταρο , ROW(INDIRECT("1:"&LEN( κύτταρο ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( κύτταρο ))), 0)))

    Θα ασχοληθούμε με τη λογική του τύπου λίγο αργότερα. Προς το παρόν, απλά αντικαταστήστε το κύτταρο με μια αναφορά στο κελί που περιέχει την αρχική συμβολοσειρά (A2 στην περίπτωσή μας), και εισάγετε τον τύπο σε οποιοδήποτε κενό κελί στην ίδια γραμμή, ας πούμε στο B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0))))

    Αυτός ο τύπος παίρνει αριθμό μόνο από το τέλος. Αν μια συμβολοσειρά έχει αριθμούς στην αρχή ή στη μέση, αγνοούνται:

    Η εξαγωγή πραγματοποιείται με τη συνάρτηση RIGHT που ανήκει στην κατηγορία των συναρτήσεων κειμένου. Η έξοδος αυτής της συνάρτησης είναι πάντα κείμενο Στην περίπτωσή μας, το αποτέλεσμα είναι ένα αριθμητική υποπερίοδος , το οποίο από την άποψη του Excel είναι επίσης κείμενο και όχι αριθμός.

    Αν θέλετε το αποτέλεσμα να είναι ένα αριθμός (το οποίο μπορείτε να χρησιμοποιήσετε σε περαιτέρω υπολογισμούς), τότε τυλίξτε τον τύπο στη συνάρτηση VALUE ή εκτελέστε μια αριθμητική πράξη που δεν αλλάζει το αποτέλεσμα, π.χ. πολλαπλασιάστε με 1 ή προσθέστε 0. Για να πιάσετε λάθη στις συμβολοσειρές που δεν περιέχουν έναν μόνο αριθμό, χρησιμοποιήστε τη συνάρτηση IFERROR. Για παράδειγμα:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    ή

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0))) +0, "")

    Σημείωση. Στο Excel με δυναμική συστοιχία (Office 365 και 2021), εισάγετε τον τύπο με τον συνηθισμένο τρόπο με το πλήκτρο Enter. Στο Excel 2019 και νωρίτερα, λειτουργεί μόνο ως τύπος συστοιχίας, οπότε θυμηθείτε να πατήσετε Ctrl + Shift + Enter για να τον ολοκληρώσετε.

    Πώς λειτουργεί αυτή η φόρμουλα:

    Για να εξαγάγετε αριθμό από μια αλφαριθμητική συμβολοσειρά, το πρώτο πράγμα που πρέπει να γνωρίζετε είναι από πού να ξεκινήσετε την εξαγωγή. Η θέση του τελευταίου μη αριθμητικού χαρακτήρα σε μια συμβολοσειρά καθορίζεται με τη βοήθεια αυτού του δύσκολου τύπου:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    Για να κατανοήσουμε τη λογική, ας την εξετάσουμε από μέσα:

    Ο συνδυασμός ROW(INDIRECT("1:"&LEN(A2))) δημιουργεί μια ακολουθία αριθμών που αντιστοιχούν στο σύνολο των χαρακτήρων της αρχικής συμβολοσειράς (A2), και δίνουμε αυτούς τους διαδοχικούς αριθμούς στο MID ως αρχικούς αριθμούς:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    Η συνάρτηση MID αντλεί κάθε μεμονωμένο χαρακτήρα από το A2 και τον επιστρέφει ως πίνακα:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Καθώς η MID είναι μια συνάρτηση κειμένου, η έξοδός της είναι πάντα κείμενο (όπως μπορείτε να παρατηρήσετε, όλοι οι χαρακτήρες περικλείονται σε εισαγωγικά). Για να μετατρέψουμε τους αριθμητικούς σε αριθμούς, πολλαπλασιάζουμε τον πίνακα με το 1 (η διπλή άρνηση --MID() θα έχει το ίδιο αποτέλεσμα). Το αποτέλεσμα αυτής της λειτουργίας είναι ένας πίνακας αριθμών και σφαλμάτων #VALUE! που αντιπροσωπεύουν μη αριθμητικούς χαρακτήρες:

    ISNUMBER({0;5;#ΤΙΜΉ!;#ΤΙΜΉ!;#ΤΙΜΉ!;#ΤΙΜΉ!;#ΤΙΜΉ!;0;1})

    Η συνάρτηση ISNUMBER αξιολογεί κάθε στοιχείο του πίνακα και δίνει την ετυμηγορία της με τη μορφή τιμών Boolean - TRUE για αριθμούς, FALSE για οτιδήποτε άλλο:

    {ΑΛΗΘΙΝΌ;ΑΛΗΘΙΝΌ;ΨΕΥΔΈΣ;ΨΕΥΔΈΣ;ΨΕΥΔΈΣ;ΨΕΥΔΈΣ;ΨΕΥΔΈΣ;ΑΛΗΘΙΝΌ;ΑΛΗΘΙΝΌ}

    Αυτός ο πίνακας πηγαίνει στον λογικό έλεγχο της συνάρτησης IF, όπου κάθε στοιχείο του πίνακα συγκρίνεται με το FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Για κάθε FALSE (μη αριθμητική τιμή), μια άλλη συνάρτηση ROW(INDIRECT()) επιστρέφει τη σχετική θέση της στη συμβολοσειρά. Για κάθε TRUE (αριθμητική τιμή), επιστρέφεται ένα μηδέν. Ο πίνακας που προκύπτει έχει την ακόλουθη μορφή:

    {0;0;3;4;5;6;0;0}

    Τα υπόλοιπα είναι εύκολα. Η συνάρτηση MAX βρίσκει τον υψηλότερο αριθμό στον παραπάνω πίνακα, ο οποίος είναι η θέση της τελευταίας μη αριθμητικής τιμής στη συμβολοσειρά (6 στην περίπτωσή μας). Απλά, αφαιρέστε αυτή τη θέση από το συνολικό μήκος της συμβολοσειράς που επιστρέφει η LEN και περάστε το αποτέλεσμα στην RIGHT για να της πείτε πόσους χαρακτήρες πρέπει να εξαγάγει από τη δεξιά πλευρά της συμβολοσειράς:

    RIGHT(A2, LEN(A2) - 6)

    Έγινε!

    Πώς να εξαγάγετε αριθμό από την αρχή της συμβολοσειράς κειμένου

    Εάν εργάζεστε με εγγραφές στις οποίες το κείμενο εμφανίζεται μετά τον αριθμό, μπορείτε να εξάγετε τον αριθμό από την αρχή μιας συμβολοσειράς χρησιμοποιώντας αυτόν τον γενικό τύπο:

    LEFT( κύτταρο , MATCH(FALSE, ISNUMBER(MID( κύτταρο , ROW(INDIRECT("1:"&LEN( κύτταρο )+1)), 1) *1), 0) -1)

    Με την αρχική συμβολοσειρά στο Α2, χρησιμοποιήστε τον ακόλουθο τύπο για να λάβετε τον αριθμό:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Ανεξάρτητα από το πόσα ψηφία υπάρχουν στη μέση ή στο τέλος, εξάγεται μόνο ο αρχικός αριθμός:

    Σημείωση. Στο Excel 365 και στο Excel 2021, λόγω της υποστήριξης δυναμικών πινάκων, ένας κανονικός τύπος λειτουργεί μια χαρά. Στο Excel 2019 και σε προγενέστερες εκδόσεις, θα πρέπει να πατήσετε Ctrl + Shift + Enter για να τον κάνετε ρητά ένα τύπος συστοιχίας .

    Πώς λειτουργεί αυτή η φόρμουλα:

    Εδώ, χρησιμοποιούμε και πάλι τον συνδυασμό των συναρτήσεων ROW, INDIRECT και LEN για να δημιουργήσουμε μια ακολουθία αριθμών ίση με το σύνολο των χαρακτήρων της αρχικής συμβολοσειράς συν 1 (ο ρόλος αυτού του πρόσθετου χαρακτήρα θα γίνει κατανοητός λίγο αργότερα).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    Οι MID και ISNUMBER κάνουν την ίδια δουλειά με το προηγούμενο παράδειγμα - η MID αντλεί μεμονωμένους χαρακτήρες και η ISNUMBER τους μετατρέπει σε λογικές τιμές. Ο προκύπτων πίνακας των TRUE και FALSE πηγαίνει στη συνάρτηση MATCH ως πίνακας αναζήτησης:

    MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}, 0)

    Η MATCH υπολογίζει μια σχετική θέση του πρώτου FALSE, δίνοντάς μας τη θέση του πρώτου μη αριθμητικού χαρακτήρα στη συμβολοσειρά (3 στο Α2). Για να εξάγουμε τους προηγούμενους αριθμούς, αφαιρούμε το 1 από τη θέση του πρώτου χαρακτήρα κειμένου και σερβίρουμε τη διαφορά στο num_chars όρισμα της συνάρτησης LEFT:

    LEFT(A2, 3-1)

    Τώρα, πίσω σε έναν "επιπλέον" χαρακτήρα στην ακολουθία που δημιουργήθηκε από την ROW(INDIRECT()+1)). Όπως ήδη γνωρίζετε, αυτή η ακολουθία παρέχει τα σημεία εκκίνησης για τη συνάρτηση MID. Χωρίς το +1, η MID θα εξήγαγε ακριβώς τόσους χαρακτήρες όσοι υπάρχουν στην αρχική συμβολοσειρά. Αν η συμβολοσειρά περιέχει μόνο αριθμούς, η ISNUMBER θα επιστρέψει μόνο TRUE ενώ η MATCH χρειάζεται τουλάχιστον ένα FALSE. Για να το εξασφαλίσουμε αυτό, προσθέτουμε έναπερισσότερους χαρακτήρες στο συνολικό μήκος της συμβολοσειράς, το οποίο η συνάρτηση MID θα μετατρέψει σε κενή συμβολοσειρά. Για παράδειγμα, στο B7, η MID επιστρέφει αυτόν τον πίνακα:

    {"1"; "2"; "3"; "4";""}

    Σημείωση. Όπως συμβαίνει και με τη συνάρτηση RIGHT, η LEFT επιστρέφει επίσης ένα αριθμητική υποπερίοδος Για να λάβετε το αποτέλεσμα ως αριθμό και όχι ως αριθμητική συμβολοσειρά, τοποθετήστε τον τύπο στη συνάρτηση VALUE ή πολλαπλασιάστε το αποτέλεσμα με 1, όπως φαίνεται στο πρώτο παράδειγμα.

    Πώς να πάρετε αριθμό από οποιαδήποτε θέση σε μια συμβολοσειρά

    Εάν η εργασία σας απαιτεί την εξαγωγή αριθμού από οποιοδήποτε σημείο μιας συμβολοσειράς, μπορείτε να χρησιμοποιήσετε τον ακόλουθο εκπληκτικό τύπο που δημοσιεύθηκε στο φόρουμ του MrExcel:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1))) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Όπου A2 είναι η αρχική συμβολοσειρά κειμένου.

    Η ανάλυση αυτού του τύπου θα απαιτούσε ένα ξεχωριστό άρθρο, οπότε μπορείτε απλά να τον αντιγράψετε στο φύλλο εργασίας σας για να βεβαιωθείτε ότι πραγματικά λειτουργεί :)

    Κατά την εξέταση των αποτελεσμάτων, ωστόσο, μπορεί να παρατηρήσετε ένα ασήμαντο μειονέκτημα - αν η συμβολοσειρά προέλευσης δεν περιέχει αριθμό, ο τύπος επιστρέφει μηδέν, όπως στη γραμμή 6 της παραπάνω εικόνας. Για να το διορθώσετε αυτό, μπορείτε να τυλίξετε τον τύπο στη δήλωση IF, ο λογικός έλεγχος της οποίας ελέγχει αν η συμβολοσειρά προέλευσης περιέχει κάποιον αριθμό. Αν ναι, ο τύπος εξάγει τον αριθμό, διαφορετικά επιστρέφει ένα κενόstring:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης, ο βελτιωμένος τύπος λειτουργεί εξαιρετικά (συγχαρητήρια στον Alex, τον γκουρού του Excel, για αυτή τη βελτίωση):

    Σε αντίθεση με όλα τα προηγούμενα παραδείγματα, το αποτέλεσμα αυτού του τύπου είναι αριθμός Για να βεβαιωθείτε γι' αυτό, παρατηρήστε απλώς τις δεξιόστροφες τιμές στη στήλη Β και τα κουτσουρεμένα μηδενικά.

    Συμβουλή. Στο Excel 365 - Excel 2019, υπάρχει μια πολύ απλούστερη λύση με τη βοήθεια της συνάρτησης TEXTJOIN. Ανατρέξτε στην ενότητα Πώς να αφαιρέσετε κείμενο και να διατηρήσετε αριθμούς.

    Εξαγωγή αριθμού από συμβολοσειρά κειμένου με την Ultimate Suite

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

    Με την προσθήκη της Ultimate Suite στην κορδέλα του Excel, μπορείτε να ανακτήσετε γρήγορα αριθμό από οποιαδήποτε αλφαριθμητική συμβολοσειρά:

    1. Πηγαίνετε στο Δεδομένα Ablebits tab>, Κείμενο και κάντε κλικ στο κουμπί Απόσπασμα :

    2. Επιλέξτε όλα τα κελιά με τις αρχικές συμβολοσειρές.
    3. Στο παράθυρο του εργαλείου Extract, επιλέξτε το Αριθμοί αποσπάσματος κουμπί επιλογής.
    4. Ανάλογα με το αν θέλετε τα αποτελέσματα να είναι τύποι ή τιμές, επιλέξτε την επιλογή Εισαγωγή ως τύπος ή αφήστε το μη επιλεγμένο (προεπιλογή).

      Η συμβουλή μου είναι να επιλέξετε αυτό το πλαίσιο εάν θέλετε οι εξαγόμενοι αριθμοί να ενημερώνονται αυτόματα μόλις γίνουν αλλαγές στις αρχικές συμβολοσειρές. Εάν θέλετε τα αποτελέσματα να είναι ανεξάρτητα από τις αρχικές συμβολοσειρές (π.χ. σε περίπτωση που σκοπεύετε να αφαιρέσετε τα δεδομένα της πηγής σε μεταγενέστερο σημείο), τότε μην επιλέξετε αυτό το πλαίσιο.

    5. Κάντε κλικ στο Εισαγωγή αποτελεσμάτων κουμπί. Έγινε!

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

    Σε αυτό το παράδειγμα, επιλέξαμε να εισάγουμε τα αποτελέσματα ως τιμές , και το πρόσθετο έκανε ακριβώς αυτό που ζητήθηκε:

    Εάν η Εισαγωγή ως τύπος ήταν επιλεγμένο, θα παρατηρούσατε ένα τύπος στη γραμμή τύπων. Είστε περίεργοι να μάθετε ποια; Απλά κατεβάστε τη δοκιμαστική έκδοση της Ultimate Suite και δείτε και μόνοι σας :)

    Διαθέσιμες λήψεις

    Excel Extract Number - δείγμα βιβλίου εργασίας (.xlsx αρχείο)

    Ultimate Suite - δοκιμαστική έκδοση (.exe αρχείο)

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