Σας έχει δοθεί ποτέ ένα φύλλο εργασίας του Excel με ονόματα, στο οποίο τα πλήρη ονόματα βρίσκονται όλα σε ένα κελί; Ο στόχος σας είναι να χωρίσετε τα ονόματα σε όνομα, επώνυμο — μια διαδικασία γνωστή ως ανάλυση. Μπορείτε να δοκιμάσετε να χρησιμοποιήσετε έναν τύπο ή/και μια συνάρτηση για βοήθεια ή μπορείτε να χρησιμοποιήσετε τον κώδικα της Visual Basic for Applications (VBA).
Μια κοινή προσέγγιση είναι να βρείτε το κενό μεταξύ του ονόματος και του επωνύμου και του voila! – ξέρετε πού τελειώνει το όνομα και πού αρχίζει το επώνυμο.
Εκτός αν έχετε ονόματα που είναι πιο σύνθετα στη δομή, όπως ο Δρ. William Healer ή ο Zak H. Sneezer III.
Εδώ είναι μια τυπική ρουτίνα VBA που εξετάζει κάθε όνομα, χαρακτήρα προς χαρακτήρα, μέχρι να βρει ένα κενό. Στη συνέχεια τοποθετεί ό,τι βρίσκεται στα αριστερά του διαστήματος σε μία στήλη και ό,τι βρίσκεται στα δεξιά του διαστήματος στη στήλη μετά.
Κάντε μέχρι το ActiveCell = "
thename = ActiveCell.Value
Για αναζήτηση = 1 To Len (το όνομα)
If Mid(thename, look, 1) = " " Τότε
ActiveCell.Offset(0, 1) = Αριστερά (το όνομα, κοιτάζοντας - 1)
ActiveCell.Offset(0, 2) = Mid(thename, look + 1)
Έξοδος για
Τέλος εαν
Επόμενο
ActiveCell.Offset(1, 0).Ενεργοποίηση
Βρόχος
Αυτή η ρουτίνα είναι χρήσιμη για την ανάλυση ονομάτων με ένα μόνο διάστημα, όπως ο Harvey Wallbanger ή ο Tom Collins. Ο παρακάτω πίνακας δείχνει το αποτέλεσμα της εκτέλεσης του κώδικα σε ονόματα με περισσότερα από ένα κενά:
Ο Δρ Γουίλιαμ Θεραπευτής |
Ο Δρ. |
William Healer |
Zak H. Sneezer III |
Ζακ |
H. Sneezer III |
Αυτή δεν είναι μια καλή προσπάθεια ανάλυσης. Τα πήγε καλά για την ανάλυση των Harvey Wallbanger και Tom Collins, αλλά όχι τόσο καλά για τα άλλα ονόματα.
Εδώ είναι μια πιο ανεπτυγμένη τεχνική που επιστρέφει καλύτερα αποτελέσματα. Λάβετε υπόψη ότι η ανάλυση ονομάτων δεν είναι τέλεια, αλλά το να το κάνετε με αυτόν τον τρόπο κάνει καλύτερη δουλειά.
Η τεχνική είναι να μετρήσετε πόσα κενά υπάρχουν στο πλήρες όνομα και στη συνέχεια να χωρίσετε το όνομα σε ένα από τα κενά. Ειδικότερα, εάν υπάρχουν τρία ή περισσότερα κενά, χρησιμοποιήστε το διάστημα δύο μέσα από τα δεξιά ως χώρο διακοπής. Διαφορετικά, χρησιμοποιήστε τον δεξιότερο χώρο ως χώρο θραύσης.
Αυτή η διαδικασία εκτελείται σε μια υπορουτίνα VBA που καλεί μια συνάρτηση ενώ κάνει βρόχο στα ονόματα. Ο αριθμός των διαστημάτων καθορίζεται νωρίς στον κύριο βρόχο και η συνάρτηση επιστρέφει τη θέση όπου βρίσκεται το διάστημα διακοπής.
Sub parse_names()
Εξασθενίστε το όνομα ως συμβολοσειρά
Dim διαστήματα ως ακέραιος αριθμός
Κάντε μέχρι το ActiveCell = "
thename = ActiveCell.Value
κενά = 0
Για δοκιμή = 1 To Len (το όνομα)
If Mid(thename, test, 1) = " " Τότε
διαστήματα = κενά + 1
Τέλος εαν
Επόμενο
Αν κενά >= 3 Τότε
break_space_position = space_position(" ", thename, κενά - 1)
Αλλού
break_space_position = space_position(" ", thename, spaces)
Τέλος εαν
Αν κενά > 0 Τότε
ActiveCell.Offset(0, 1) = Left(thename, break_space_position - 1)
ActiveCell.Offset(0, 2) = Mid(thename, break_space_position + 1)
Αλλού
Αυτό ισχύει όταν το πλήρες όνομα είναι απλώς ένα μόνο όνομα χωρίς κενά
ActiveCell.Offset(0, 1) = το όνομα
Τέλος εαν
ActiveCell.Offset(1, 0).Ενεργοποίηση
Βρόχος
End Sub
Συνάρτηση space_position(what_to_look_for As String, what_to_look_in As String, space_count As Integer) Ως ακέραιος
Dim loop_counter Ως ακέραιος αριθμός
space_position = 0
Για loop_counter = 1 To space_count
space_position = InStr(loop_counter + space_position, what_to_look_in, what_to_look_for)
Αν space_position = 0 Τότε βγείτε για
Επόμενο
Λειτουργία τερματισμού
Ο παρακάτω πίνακας δείχνει πώς φαίνεται τώρα το αποτέλεσμα:
Ο Δρ Γουίλιαμ Θεραπευτής |
Ο Δρ Γουίλιαμ |
Θεραπευτής |
Zak H. Sneezer III |
Ζακ Χ. |
Sneezer III |
Η ανάλυση ονομάτων είναι τόσο τέχνη όσο και τεχνική διαδικασία. Σε αυτό το δεύτερο παράδειγμα, όλα τα ονόματα και τα επώνυμα βρίσκονται στις σωστές στήλες. Εάν εισήχθη ένα νέο μεγάλο όνομα με πέντε ή περισσότερα κενά, η ρουτίνα μπορεί να κάνει λάθος ανάλυση και ο κώδικας VBA θα χρειαζόταν περισσότερες δοκιμές υπό όρους. Αλλά αυτό το παράδειγμα είναι τώρα στο σωστό δρόμο ως ρουτίνα ανάλυσης ονομάτων με βιομηχανική αντοχή.