Πρόκληση τύπου - επισήμανση από κωδικούς ακολουθίας - Παζλ

Πίνακας περιεχομένων

Το πρόβλημα

Έχουμε μια λίστα με αλφαριθμητικούς κωδικούς. Κάθε κωδικός αποτελείται από ένα μόνο γράμμα (A, B, C, κ.λπ.) ακολουθούμενο από έναν τριψήφιο αριθμό. Αυτοί οι κωδικοί πρέπει να εμφανίζονται με αλφαβητική σειρά, αλλά μερικές φορές είναι εκτός σειράς. Θέλουμε να επισημάνουμε κωδικούς εκτός σειράς.

Πρόκληση # 1

Ποιος τύπος στη στήλη "Έλεγχος" θα τοποθετήσει ένα "x" δίπλα σε έναν κωδικό που δεν είναι ακολουθία; Σε αυτήν την πρόκληση, ελέγχουμε μόνο ότι το * αριθμητικό * τμήμα του κώδικα είναι εκτός ακολουθίας και όχι ότι το ίδιο το γράμμα είναι εκτός ακολουθίας.

Πρόκληση # 2

Πώς μπορεί να επεκταθεί ο παραπάνω τύπος για να ελέγξει εάν το τμήμα "άλφα" του κώδικα (A, B, C, κ.λπ.) είναι εκτός σειράς; Για παράδειγμα, πρέπει να επισημάνουμε έναν κωδικό που ξεκινά με "A" εάν εμφανίζεται μετά από έναν κωδικό που ξεκινά με "C" ή "B".

Κατεβάστε το φύλλο εργασίας παρακάτω και ακολουθήστε την πρόκληση!

Σημείωση: υπάρχουν 2 φύλλα στο βιβλίο εργασίας, ένα για την Πρόκληση # 1, ένα για την Πρόκληση # 2.

Συμβουλή - Αυτό το βίντεο δείχνει μερικές συμβουλές για τον τρόπο επίλυσης ενός προβλήματος όπως αυτό.

Υποθέσεις

  1. Όλοι οι κωδικοί περιέχουν πάντα τέσσερις χαρακτήρες: 1 κεφαλαίο γράμμα + 3 αριθμούς.
  2. Ο αριθμός κωδικών ανά γράμμα είναι τυχαίος, αλλά δεν πρέπει να υπάρχουν κενά στις αριθμητικές τιμές.
  3. Είναι απαραίτητο μόνο να επισημάνετε τον πρώτο κωδικό με ένα γράμμα εκτός ακολουθίας και όχι όλους τους επόμενους κωδικούς.
Απάντηση (κάντε κλικ για επέκταση)

Ακολουθούν μερικές λύσεις εργασίας. Είναι σημαντικό να καταλάβετε ότι υπάρχουν πολλοί, πολλοί, τρόποι επίλυσης κοινών προβλημάτων στο Excel. Οι παρακάτω απαντήσεις είναι μόνο η προσωπική μου προτίμηση. Σε όλους τους παρακάτω τύπους, μπορείτε να κάνετε κλικ στα ονόματα των λειτουργιών εάν θέλετε περισσότερες πληροφορίες.

Πρόκληση # 1

Αρχικά πήγα με αυτόν τον τύπο:

=IF((LEFT(B5)=LEFT(B6))*(MID(B5,2,3)+1MID(B6,2,3)+0),"x","")

Σημείωση Το MID επιστρέφει κείμενο. Προσθέτοντας 1 και προσθέτοντας μηδέν, παίρνουμε το Excel να εξαναγκάζει το κείμενο σε έναν αριθμό. Ο πολλαπλασιασμός εντός της λογικής δοκιμής εντός IF χρησιμοποιεί λογική boolean για την αποφυγή άλλου ένθετου IF. Δεν είμαι σίγουρος γιατί δεν χρησιμοποίησα ΔΕΞΙΑ, κάτι που θα λειτουργούσε καλά και εδώ.

Σημειώστε επίσης ότι το LEFT δεν απαιτεί τον αριθμό χαρακτήρων και θα επιστρέψει τον πρώτο χαρακτήρα εάν δεν παρέχεται.

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

=IF((LEFT(B5)=LEFT(B6))*(MID(B6,2,3)-MID(B5,2,3)1),"x","")

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

Πρόκληση # 2

Για αυτήν τη λύση, χρησιμοποίησα πολλά ένθετα IF (προσθήκη αλλαγών γραμμής για αναγνωσιμότητα):

=IF(LEFT(B5)=LEFT(B6), IF((MID(B5,2,3)+1MID(B6,2,3)+0),"x",""), IF(CODE(B5)+1CODE(B6),"x",""))

Το έκανα αυτό επειδή η πρώτη δοκιμή LEFT (B5) = LEFT (B6) καθορίζει εάν ελέγχουμε αριθμούς ή γράμματα. Εάν ο πρώτος χαρακτήρας είναι ο ίδιος, ελέγχουμε αριθμούς όπως παραπάνω. Εάν όχι, ελέγχουμε μόνο το πρώτο γράμμα.

Σημειώστε ότι η συνάρτηση CODE θα επιστρέψει τον αριθμό ascii του πρώτου χαρακτήρα εάν μια συμβολοσειρά κειμένου περιέχει περισσότερους από 1 χαρακτήρες. Αυτό μοιάζει με χαρά και ίσως κάνει τον κώδικα λιγότερο κατανοητό, αλλά λειτουργεί :)

Εάν αυτό προσβάλλει τις ευαισθησίες σας, χρησιμοποιήστε το ΑΡΙΣΤΕΡΟ όπως παραπάνω μέσα στον ΚΩΔΙΚΟ για να παραδώσετε μόνο τον πρώτο χαρακτήρα.

ενδιαφέροντα άρθρα...