Λειτουργία διαχωρισμού VBA - Διαχωρισμός συμβολοσειράς κειμένου σε πίνακα

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

Χρήση της λειτουργίας VBA Split

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

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

Η σύνταξη είναι:

1 Διαχωρισμός έκφρασης, οριοθέτης [προαιρετικό], όριο [προαιρετικό], σύγκριση [προαιρετικό]

Η λειτουργία VBA Split έχει τέσσερις παραμέτρους:

  • Εκφραση - Η σειρά κειμένου που θέλετε να χωρίσετε σε διαφορετικά μέρη.
  • Οριοθέτης (προαιρετικός)- συμβολοσειρά ή μη εκτυπώσιμος χαρακτήρας - Ορίζει τον χαρακτήρα οριοθέτησης που πρόκειται να χρησιμοποιηθεί για τη διάσπαση. Εάν δεν παρέχεται χαρακτήρας οριοθέτησης, χρησιμοποιείται η προεπιλογή ενός διαστήματος.
  • Οριο (προαιρετικός) - αριθμός - Καθορίζει πόσες διασπάσεις θα γίνουν. Εάν είναι κενό, όλα τα διαθέσιμα διαχωριστικά θα γίνουν μέσα στη συμβολοσειρά. Εάν έχει οριστεί σε 1, τότε δεν θα γίνουν διαχωρισμοί. Βασικά, σας δίνει τη δυνατότητα να διαχωρίσετε έναν συγκεκριμένο αριθμό τιμών ξεκινώντας από την αρχή της συμβολοσειράς π.χ. όπου η χορδή είναι πολύ μεγάλη και χρειάζεστε μόνο τους τρεις πρώτους διαχωρισμούς.
  • Συγκρίνω (προαιρετικός) - Εάν ο οριοθέτησής σας είναι χαρακτήρας κειμένου, τότε χρησιμοποιείται για εναλλαγή εάν ο οριοθέτης έχει διάκριση πεζών-κεφαλαίων ή όχι. Οι τιμές είναι vbBinaryCompare (διάκριση πεζών-κεφαλαίων) και vbTextCompare (μη διάκριση πεζών-κεφαλαίων).

Η συνάρτηση split επιστρέφει πάντα έναν πίνακα.

Απλό παράδειγμα της συνάρτησης Split

123456789101112 Sub SplitExample ()«Ορισμός μεταβλητώνDim MyArray () As String, MyString As String, I As Variant«Δείγμα συμβολοσειράς με οριοθέτες χώρουMyString = "Ένα δύο τρία τέσσερα"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString)"επαναλαμβάνεται μέσω του πίνακα που δημιουργήθηκε για να εμφανίσει κάθε τιμήΓια κάθε I In MyArrayMsgBox ΙΣτη συνέχεια εγώΤέλος υπο

Σε αυτό το παράδειγμα, δεν ορίζεται οριοθέτης επειδή όλες οι λέξεις έχουν κενό μεταξύ τους, οπότε μπορεί να χρησιμοποιηθεί ο προεπιλεγμένος οριοθέτης (διάστημα).

Ο πίνακας δεν έχει διαστάσεις και ορίζεται ως συμβολοσειρά. Η μεταβλητή I, η οποία χρησιμοποιείται στον βρόχο For … Next πρέπει να έχει διαστάσεις ως παραλλαγή.

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

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

Μπορείτε να διορθώσετε αυτό το πρόβλημα χρησιμοποιώντας τη λειτουργία Αντικατάσταση για να αντικαταστήσετε τυχόν διπλά διαστήματα με ένα μόνο διάστημα:

1 MyString = Αντικατάσταση (MyString, "", "")

Ένας χώρος που ακολουθεί ή οδηγεί μπορεί επίσης να προκαλέσει προβλήματα με την παραγωγή ενός άδειου διαχωρισμού. Αυτά συχνά είναι πολύ δύσκολο να τα δεις. Μπορείτε να αφαιρέσετε αυτούς τους εξωτερικούς χώρους χρησιμοποιώντας τη συνάρτηση Trim:

1 MyString = Περικοπή (MyString)

Χρήση της λειτουργίας Split with a Delimiter Character

Μπορούμε να χρησιμοποιήσουμε έναν οριοθέτη ημι-άνω τελεία (;). Αυτό βρίσκεται συχνά σε συμβολοσειρές διευθύνσεων email για τον διαχωρισμό των διευθύνσεων. Ενδέχεται να σας αποσταλεί ένα μήνυμα ηλεκτρονικού ταχυδρομείου το οποίο κοινοποιείται σε πολλούς συναδέλφους και θέλετε να δείτε μια λίστα στο φύλλο εργασίας σας σε ποιον έχει πάει. Μπορείτε εύκολα να αντιγράψετε τις διευθύνσεις ηλεκτρονικού ταχυδρομείου από τα πλαίσια ηλεκτρονικού ταχυδρομείου «Προς» ή «Αντιγραφή» και στον κωδικό σας.

123456789101112131415 Sub SplitBySemicolonExample ()«Ορισμός μεταβλητώνDim MyArray () As String, MyString As String, I As Variant, N As Integer«Δείγμα συμβολοσειράς με οριοθετητές ημι -παχέος εντέρουMyString = "[email protected]; [email protected]; [email protected]; [email protected]"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, ";")«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε διεύθυνση ηλεκτρονικού ταχυδρομείου στην πρώτη στήλη του φύλλου εργασίαςΕύρος ("A" & N + 1) .Value = MyArray (N)Επόμενο ΝΤέλος υπο

Σημειώστε ότι ένας βρόχος For … Next χρησιμοποιείται για επανάληψη μέσω του πίνακα. Το πρώτο στοιχείο στον πίνακα ξεκινά πάντα από μηδέν και η συνάρτηση Upper Bound χρησιμοποιείται για να λάβει τον μέγιστο αριθμό στοιχείων.

Μετά την εκτέλεση αυτού του κώδικα, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Χρήση παραμέτρου ορίου σε συνάρτηση Split

Η παράμετρος ορίου επιτρέπει έναν συγκεκριμένο αριθμό διασπάσεων από την αρχή της συμβολοσειράς. Δυστυχώς, δεν μπορείτε να παράσχετε μια αρχική θέση ή μια σειρά διαχωρισμών που πρέπει να γίνουν, οπότε είναι αρκετά βασικό. Μπορείτε να δημιουργήσετε τον δικό σας κώδικα VBA για να δημιουργήσετε μια λειτουργία για να το κάνετε αυτό και αυτό θα εξηγηθεί αργότερα σε αυτό το άρθρο.

123456789101112131415 Sub SplitWithLimitExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, I As Variant, N As Integer«Δείγμα συμβολοσειράς με διαχωριστικά κόμματοςMyString = "Ένα, δύο, τρία, τέσσερα, πέντε, έξι"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, ",", 4)«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«Επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε διάσπαση στην πρώτη στήλη του φύλλου εργασίαςΕύρος ("A" & N + 1) .Value = MyArray (N)Επόμενο ΝΤέλος υπο

Αφού εκτελέσετε αυτόν τον κώδικα, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Μόνο οι τρεις πρώτες τιμές διαχωρισμού εμφανίζονται ξεχωριστά. Οι τελευταίες τρεις τιμές εμφανίζονται ως μία μακρά συμβολοσειρά και δεν χωρίζονται.

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

Χρήση της παραμέτρου σύγκρισης σε μια συνάρτηση Split

Η παράμετρος Σύγκριση καθορίζει εάν ο οριοθέτης έχει διάκριση πεζών-κεφαλαίων ή όχι. Αυτό δεν ισχύει εάν οι οριοθετητές είναι κόμματα, ημι-άνω και κάτω τελεία.

Σημείωση: Αντ 'αυτού, μπορείτε πάντα να τοποθετήσετε το Opera Compare Text <> στο επάνω μέρος της μονάδας σας για να εξαλείψετε την ευαισθησία πεζών-κεφαλαίων για ολόκληρη τη μονάδα.

123456789101112131415 Sub SplitByCompareExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, I As Variant, N As Integer«Δείγμα συμβολοσειράς με οριοθέτες ΧMyString = "OneXTwoXThreexFourXFivexSix"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, "X",, vbBinaryCompare)«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε διάσπαση στην πρώτη στήλη του φύλλου εργασίαςΕύρος ("A" & N + 1) .Value = MyArray (N)Επόμενο ΝΤέλος υπο

Σε αυτό το παράδειγμα, η συμβολοσειρά που πρόκειται να χωριστεί χρησιμοποιεί τον χαρακτήρα ‘X’ ως οριοθέτη. Ωστόσο, σε αυτήν τη συμβολοσειρά, υπάρχει ένα μείγμα κεφαλαίων και πεζών χαρακτήρων «Χ». Η παράμετρος Σύγκριση στη συνάρτηση Split χρησιμοποιεί έναν κεφαλαίο χαρακτήρα ‘X’.

Εάν η παράμετρος Σύγκριση έχει οριστεί σε vbBinaryCompare, τότε οι μικροί χαρακτήρες ‘x’ θα αγνοηθούν και το φύλλο εργασίας σας θα μοιάζει με αυτό:

Εάν η παράμετρος Σύγκριση έχει οριστεί σε vbTextCompare, τότε οι πεζά γράμματα «x» θα χρησιμοποιηθούν στη διαίρεση και το φύλλο εργασίας σας θα μοιάζει με αυτό:

Σημειώστε ότι η τιμή στο κελί A6 περικόπτεται επειδή περιέχει έναν μικρό χαρακτήρα «x». Επειδή ο διαχωρισμός δεν έχει διάκριση πεζών -κεφαλαίων, οποιοσδήποτε οριοθέτης που αποτελεί μέρος μιας δευτερεύουσας συμβολοσειράς θα προκαλέσει τη διάσπαση.

Αυτό είναι ένα σημαντικό σημείο που πρέπει να έχετε κατά νου όταν χρησιμοποιείτε οριοθέτηση κειμένου και vbTextCompare. Μπορείτε εύκολα να καταλήξετε σε λάθος αποτέλεσμα.

Χρήση μη εκτυπώσιμων χαρακτήρων ως οριοθέτη χαρακτήρα

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

Εδώ χρησιμοποιούμε το vbCr για να καθορίσουμε μια επιστροφή μεταφοράς <>

123456789101112131415 Sub SplitByNonPrintableExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, I As Variant, N As Integer«Δείγμα συμβολοσειράς με οριοθέτες επιστροφής μεταφοράςMyString = "One" & vbCr & "Two" & vbCr & "Three" & vbCr & "Four" & vbCr & "Five" & vbCr & "Six"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, vbCr,, vbTextCompare)«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«Επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε διάσπαση στην πρώτη στήλη του φύλλου εργασίαςΕύρος ("A" & N + 1) .Value = MyArray (N)Επόμενο ΝΤέλος υπο

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

Όταν εκτελείται αυτός ο κώδικας, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Χρήση της συνάρτησης Join για την αναστροφή ενός διαχωρισμού

Η συνάρτηση Join θα ενώσει ξανά όλα τα στοιχεία ενός πίνακα, αλλά χρησιμοποιώντας έναν καθορισμένο οριοθέτη. Εάν δεν καθοριστεί χαρακτήρας οριοθέτησης, θα χρησιμοποιηθεί κενό διάστημα.

123456789101112131415 Sub JoinExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, I As Variant, N As IntegerDim Target As String«Δείγμα συμβολοσειράς με διαχωριστικά κόμματοςMyString = "Ένα, δύο, τρία, τέσσερα, πέντε, έξι"«Τοποθετήστε το MyString στο κελί A1Εύρος ("A1"). Τιμή = MyString'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, ",")'Χρησιμοποιήστε τη συνάρτηση Join για να δημιουργήσετε ξανά την αρχική συμβολοσειρά χρησιμοποιώντας έναν οριοθέτη ημι-παχέος εντέρουΣτόχος = Εγγραφή (MyArray, ”;”)«Τοποθετήστε τη συμβολοσειρά αποτελεσμάτων στο κελί A2Εύρος ("A2"). Τιμή = ΣτόχοςΤέλος υπο

Αυτός ο κώδικας χωρίζει μια συμβολοσειρά με διαχωριστικά κόμματος σε έναν πίνακα και την ενώνει ξανά χρησιμοποιώντας οριοθέτες ημι-παχέος εντέρου.

Αφού εκτελέσετε αυτόν τον κώδικα, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Το κελί Α1 έχει την αρχική συμβολοσειρά με οριοθέτες κόμματος και το κελί Α2 έχει τη νέα συμβολοσειρά με οριοθέτες ημι-παχέος εντέρου.

Χρήση της λειτουργίας Split για την καταμέτρηση λέξεων

Έχοντας υπόψη ότι μια μεταβλητή συμβολοσειράς στο Excel VBA μπορεί να έχει μήκος έως 2Gb, μπορείτε να χρησιμοποιήσετε τη συνάρτηση διαίρεσης για να μετρήσετε λέξεις σε ένα κομμάτι κειμένου. Προφανώς, το Microsoft Word το κάνει αυτόματα, αλλά αυτό θα μπορούσε να είναι χρήσιμο για ένα απλό αρχείο κειμένου ή κείμενο που αντιγράφεται από άλλη εφαρμογή.

1234567891011121314 ΥποαριθμόςOfWordsExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String«Δείγμα συμβολοσειράς με οριοθέτες χώρουMyString = "One Two Three Four Four Six"«Αφαιρέστε τυχόν διπλά κενάMyString = Αντικατάσταση (MyString, "", "")«Αφαιρέστε τυχόν κεντρικούς ή πίσω χώρουςMyString = Περικοπή (MyString)'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString)'Εμφάνιση αριθμού λέξεων χρησιμοποιώντας τη συνάρτηση UBoundMsgBox "Αριθμός λέξεων" & UBound (MyArray) + 1Τέλος υπο

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

Ο κώδικας χρησιμοποιεί τις λειτουργίες Αντικατάσταση και Περικοπή για να αφαιρέσει αυτούς τους επιπλέον χώρους.

Η τελική γραμμή κώδικα εμφανίζει τον αριθμό των λέξεων που βρέθηκαν χρησιμοποιώντας τη συνάρτηση UBound για να λάβετε τον μέγιστο αριθμό στοιχείων του πίνακα και στη συνέχεια να τον αυξήσετε κατά 1. Αυτό συμβαίνει επειδή το πρώτο στοιχείο πίνακα ξεκινά από μηδέν.

Χωρισμός μιας διεύθυνσης σε κελιά φύλλου εργασίας

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

123456789101112131415 Υποδιεύθυνση Παράδειγμα ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, N As Integer«Ρύθμιση συμβολοσειράς με τη διεύθυνση Microsoft CorporationMyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'Χρησιμοποιήστε τη συνάρτηση split για να διαιρέσετε τη συμβολοσειρά χρησιμοποιώντας έναν οριοθέτη κόμμαMyArray = Split (MyString, ",")«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε διάσπαση στην πρώτη στήλη του φύλλου εργασίαςΕύρος ("A" & N + 1) .Value = MyArray (N)Επόμενο ΝΤέλος υπο

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

Εάν θέλετε μόνο να επιστρέψετε τον ταχυδρομικό κώδικα (τελευταίο στοιχείο πίνακα), τότε μπορείτε να χρησιμοποιήσετε τον κωδικό:

123456789101112 ΥποδιεύθυνσηZipCodeExample ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, N As Integer, Temp As String«Ρύθμιση συμβολοσειράς με τη διεύθυνση Microsoft CorporationMyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'Χρησιμοποιήστε τη συνάρτηση split για να διαιρέσετε τη συμβολοσειρά χρησιμοποιώντας έναν οριοθέτη κόμμαMyArray = Split (MyString, ",")«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«Τοποθετήστε τον ταχυδρομικό κώδικα στο κελί A1Εύρος ("A1"). Τιμή = MyArray (UBound (MyArray))Τέλος υπο

Αυτό θα χρησιμοποιήσει μόνο το τελευταίο στοιχείο στον πίνακα, το οποίο βρίσκεται χρησιμοποιώντας τη συνάρτηση UBound.

Από την άλλη πλευρά, μπορεί να θέλετε να δείτε όλες τις γραμμές σε ένα κελί, ώστε να μπορούν να εκτυπωθούν σε μια ετικέτα διεύθυνσης:

1234567891011121314151617 Υποδιεύθυνση Παράδειγμα ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String, N As Integer, Temp As String«Ρύθμιση συμβολοσειράς με τη διεύθυνση Microsoft CorporationMyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'Χρησιμοποιήστε τη συνάρτηση split για να διαιρέσετε τη συμβολοσειρά χρησιμοποιώντας έναν οριοθέτη κόμμαMyArray = Split (MyString, ",")«Διαγράψτε το φύλλο εργασίαςActiveSheet.UsedRange.Clear«επαναλάβετε μέσω του πίνακαΓια N = 0 To UBound (MyArray)«Τοποθετήστε κάθε στοιχείο πίνακα συν έναν χαρακτήρα τροφοδοσίας γραμμής σε μια συμβολοσειράTemp = Temp & MyArray (N) & vbLfΕπόμενο Ν«Βάλτε τη συμβολοσειρά στο φύλλο εργασίαςΕύρος ("A1") = TempΤέλος υπο

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

Το φύλλο εργασίας θα μοιάζει με αυτό μετά την εκτέλεση του κώδικα:

Διαχωρισμός συμβολοσειράς σε κελιά φύλλου εργασίας

Μπορείτε να αντιγράψετε τον πίνακα Split σε κελιά φύλλου εργασίας <> με μία μόνο εντολή:

12345678910 Sub CopyToRange ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String«Δείγμα συμβολοσειράς με οριοθέτες χώρουMyString = "Ένα, δύο, τρία, τέσσερα, πέντε, έξι"'Χρησιμοποιήστε τη λειτουργία Split για να χωρίσετε τα συστατικά μέρη της συμβολοσειράςMyArray = Split (MyString, ",")'Αντιγράψτε τον πίνακα στο φύλλο εργασίαςΕύρος ("A1: A" & UBound (MyArray) + 1). Value = WorksheetFunction.Transpose (MyArray)Τέλος υπο

Όταν εκτελεστεί αυτός ο κώδικας, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Δημιουργία νέας συνάρτησης για να επιτρέπεται ο διαχωρισμός από ένα δεδομένο σημείο

Η παράμετρος Limit στη λειτουργία Split σας επιτρέπει να καθορίσετε ένα ανώτερο όριο όπου θέλετε να σταματήσει η διάσπαση. Αρχίζει πάντα από την αρχή της συμβολοσειράς.

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

Μπορείτε εύκολα να δημιουργήσετε μια λειτουργία (που ονομάζεται SplitSlicer) μόνοι σας στο VBA για να το κάνετε αυτό:

123456789101112131415161718192021222324 Λειτουργία SplitSlicer (Target As String, Del As String, Start As Integer, N As Integer)'Δημιουργία μεταβλητής πίνακαDim MyArray () As String«Αποτυπώστε τη διαίρεση χρησιμοποιώντας τη μεταβλητή έναρξης χρησιμοποιώντας τον χαρακτήρα οριοθέτησηςMyArray = Split (Target, Del, Start)«Ελέγξτε εάν η παράμετρος έναρξης είναι μεγαλύτερη από τον αριθμό των διαχωρισμών - αυτό μπορεί να προκαλέσει προβλήματαΑν Έναρξη> UBound (MyArray) + 1 Τότε‘Εμφάνιση σφάλματος και έξοδος από τη λειτουργίαMsgBox "Η παράμετρος έναρξης είναι μεγαλύτερος από τον αριθμό των διαθέσιμων διαχωρισμών"SplitSlicer = MyArrayΛειτουργία εξόδουΤέλος εαν"Τοποθετήστε το τελευταίο στοιχείο πίνακα στη συμβολοσειράΣτόχος = MyArray (UBound (MyArray))«Διαχωρίστε τη συμβολοσειρά χρησιμοποιώντας το όριο ως ΝMyArray = Split (Target, Del, N)«Βεβαιωθείτε ότι το ανώτατο όριο είναι μεγαλύτερο από μηδέν καθώς ο κώδικας αφαιρεί το τελευταίο στοιχείοΕάν UBound (MyArray)> 0 Τότε'Χρησιμοποιήστε το ReDim για να αφαιρέσετε το τελικό στοιχείο του πίνακαReDim Preserve MyArray (UBound (MyArray) - 1)Τέλος εαν'Επιστροφή του νέου πίνακαSplitSlicer = MyArrayΛειτουργία Τέλους

Αυτή η λειτουργία είναι χτισμένη με τέσσερις παραμέτρους:

  • Στόχος - string - αυτή είναι η συμβολοσειρά εισόδου που θέλετε να χωρίσετε
  • Del - συμβολοσειρά ή μη εκτυπώσιμος χαρακτήρας - αυτός είναι ο οριοθετητικός χαρακτήρας που χρησιμοποιείτε π.χ. κόμμα, κόλον
  • Αρχή - αριθμός - αυτός είναι ο διαχωρισμός έναρξης για τη φέτα σας
  • Ν - αριθμός - αυτός είναι ο αριθμός των διαχωρισμών που θέλετε να κάνετε μέσα στη φέτα σας

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

Η συνάρτηση χρησιμοποιεί τη λειτουργία Split για να δημιουργήσει έναν πίνακα χρησιμοποιώντας την παράμετρο Start ως όριο. Αυτό σημαίνει ότι τα στοιχεία του πίνακα θα κρατήσουν τα splits μέχρι την παράμετρο start, αλλά το υπόλοιπο της συμβολοσειράς θα είναι το τελευταίο στοιχείο και δεν θα χωριστεί.

Το τελευταίο στοιχείο στον πίνακα μεταφέρεται πίσω σε μια συμβολοσειρά χρησιμοποιώντας τη συνάρτηση UBound για να καθορίσει ποιο στοιχείο είναι αυτό.

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

Η δήλωση ReDim χρησιμοποιείται για την αφαίρεση του τελευταίου στοιχείου καθώς θέλουμε μόνο τα συγκεκριμένα στοιχεία να μείνουν στον πίνακα. Σημειώστε ότι χρησιμοποιείται η παράμετρος Διατήρηση, διαφορετικά όλα τα δεδομένα στον πίνακα θα χαθούν.

Στη συνέχεια, ο νέος πίνακας επιστρέφει στον κώδικα από τον οποίο κλήθηκε.

Λάβετε υπόψη ότι ο κώδικας είναι "δοκιμασμένος σε σφάλματα". Οι χρήστες θα κάνουν συχνά περίεργα πράγματα που δεν σκεφτήκατε. Για παράδειγμα, εάν προσπαθήσουν να χρησιμοποιήσουν τη συνάρτηση με την παράμετρο Start ή N μεγαλύτερη από τον διαθέσιμο αριθμό διαχωρισμών στη συμβολοσειρά, αυτό είναι πιθανό να προκαλέσει αποτυχία της συνάρτησης.

Ο κώδικας περιλαμβάνεται για τον έλεγχο της τιμής Έναρξης και επίσης για να βεβαιωθείτε ότι υπάρχει ένα στοιχείο που μπορεί να αφαιρεθεί όταν χρησιμοποιείται η εντολή ReDim στον πίνακα.

Ακολουθεί ο κώδικας για τη δοκιμή της λειτουργίας:

123456789101112 Sub TestSplitSlicer ()«Δημιουργήστε μεταβλητέςDim MyArray () As String, MyString As String'Ορισμός δείγματος συμβολοσειράς με οριοθέτες κόμματοςMyString = "Ένα, δύο, τρία, τέσσερα, πέντε, έξι, επτά, οκτώ, εννέα, δέκα"«Χρησιμοποιήστε τη συνάρτηση Splitslicer για να ορίσετε νέο πίνακαMyArray = SplitSlicer (MyString, ",", 4, 3)«Διαγράψτε το ενεργό φύλλοActiveSheet.UsedRange.Clear'Αντιγράψτε τον πίνακα στο φύλλο εργασίαςΕύρος ("A1: A" & UBound (MyArray) + 1). Value = WorksheetFunction.Transpose (MyArray)Τέλος υπο

Εκτελέστε αυτόν τον κώδικα και το φύλλο εργασίας σας θα μοιάζει με αυτό:

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave