Συλλογές Excel VBA

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

Υπάρχουν ήδη ενσωματωμένες συλλογές με Excel VBA. Ένα παράδειγμα είναι η συλλογή φύλλων. Για κάθε φύλλο εργασίας σε ένα βιβλίο εργασίας, υπάρχει ένα στοιχείο στη συλλογή Φύλλα.

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

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

1234567 Sub TestWorksheets ()Dim Sh As φύλλο εργασίαςΓια κάθε Sh In SheetsMsgBox Sh. ΌνομαMsgBox Sh.VisibleΕπόμενο ShΤέλος υπο

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

12 MsgBox Sheets (1). ΌνομαMsgBox Sheets ("Sheet1"). Όνομα

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

Σημειώστε ότι με τις συλλογές VBA ο αριθμός ευρετηρίου ξεκινά με 1 και όχι με 0

Συλλογές έναντι συστοιχιών

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

  1. Οι πίνακες είναι πολυδιάστατοι ενώ οι συλλογές είναι μόνο μιας διάστασης. Μπορείτε να διαστασιολογήσετε έναν πίνακα με πολλές διαστάσεις π.χ.
1 Dim MyArray (10, 2) As String

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

  1. Όταν συμπληρώνετε τον πίνακά σας, χρειάζεστε μια ξεχωριστή γραμμή κώδικα για να βάλετε μια τιμή σε κάθε στοιχείο του πίνακα. Εάν είχατε έναν πίνακα δύο διαστάσεων, θα χρειαζόσασταν πραγματικά 2 γραμμές κώδικα - μία γραμμή για την πρώτη στήλη και μία γραμμή για τη δεύτερη στήλη. Με το αντικείμενο Συλλογή, απλώς χρησιμοποιείτε τη μέθοδο Προσθήκη, έτσι ώστε το νέο στοιχείο να προστεθεί στη συλλογή και η τιμή του ευρετηρίου να προσαρμοστεί αυτόματα ανάλογα με την τιμή.
  2. Εάν πρέπει να διαγράψετε ένα στοιχείο δεδομένων, τότε είναι πιο περίπλοκο στον πίνακα. Μπορείτε να ορίσετε τις τιμές ενός στοιχείου σε μια κενή τιμή, αλλά το ίδιο το στοιχείο εξακολουθεί να υπάρχει μέσα στον πίνακα. Εάν χρησιμοποιείτε έναν βρόχο For Next για να επαναλάβετε τον πίνακα, ο βρόχος θα επιστρέψει μια κενή τιμή, η οποία θα χρειαστεί κωδικοποίηση για να βεβαιωθείτε ότι η κενή τιμή αγνοείται. Σε μια συλλογή χρησιμοποιείτε τις μεθόδους Προσθήκη ή Κατάργηση και όλη η ευρετηρίαση και η αλλαγή μεγέθους λαμβάνεται αυτόματα. Το στοιχείο που έχει αφαιρεθεί εξαφανίζεται εντελώς. Οι πίνακες είναι χρήσιμοι για ένα σταθερό μέγεθος δεδομένων, αλλά οι συλλογές είναι καλύτερες για τις περιπτώσεις όπου η ποσότητα δεδομένων μπορεί να αλλάξει.
  3. Οι συλλογές είναι μόνο για ανάγνωση, ενώ οι τιμές του πίνακα μπορούν να αλλάξουν χρησιμοποιώντας το VBA. Με μια συλλογή, θα πρέπει πρώτα να αφαιρέσετε την τιμή που πρέπει να αλλάξετε και στη συνέχεια να προσθέσετε τη νέα τροποποιημένη τιμή.
  4. Σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε μόνο έναν τύπο δεδομένων για τα στοιχεία που ορίζεται όταν κάνετε διάσταση στον πίνακα. Ωστόσο, στον πίνακα μπορείτε να χρησιμοποιήσετε προσαρμοσμένους τύπους δεδομένων που έχετε σχεδιάσει μόνοι σας. Θα μπορούσατε να έχετε μια πολύ περίπλοκη δομή πίνακα χρησιμοποιώντας έναν προσαρμοσμένο τύπο δεδομένων, ο οποίος με τη σειρά του έχει αρκετούς προσαρμοσμένους τύπους δεδομένων κάτω από αυτό. Σε μια συλλογή, μπορείτε να προσθέσετε τύπους δεδομένων χρήσης δεδομένων για κάθε στοιχείο. Θα μπορούσατε να έχετε μια αριθμητική τιμή, μια ημερομηνία ή μια συμβολοσειρά - το αντικείμενο συλλογής θα λάβει οποιονδήποτε τύπο δεδομένων. Εάν προσπαθήσατε να βάλετε μια τιμή συμβολοσειράς σε έναν πίνακα που είχε διαστάσεις ως αριθμητική, θα εμφανιστεί ένα μήνυμα σφάλματος.
  5. Οι συλλογές είναι γενικά ευκολότερες στη χρήση από τους πίνακες. Σε όρους κωδικοποίησης, όταν δημιουργείτε ένα αντικείμενο συλλογής, έχει μόνο δύο μεθόδους (Προσθήκη και κατάργηση) και δύο ιδιότητες (Καταμέτρηση και αντικείμενο), οπότε το αντικείμενο δεν είναι καθόλου περίπλοκο στον προγραμματισμό.
  6. Οι συλλογές μπορούν να χρησιμοποιήσουν κλειδιά για τον εντοπισμό δεδομένων. Οι πίνακες δεν έχουν αυτήν τη συνάρτηση και απαιτούν βρόχο κώδικα για να επαναληφθεί μέσω του πίνακα για να βρει συγκεκριμένες τιμές.
  7. Το μέγεθος ενός πίνακα πρέπει να καθοριστεί κατά την πρώτη δημιουργία του. Πρέπει να έχετε μια ιδέα για το πόσα δεδομένα πρόκειται να αποθηκεύσει. Εάν πρέπει να αυξήσετε το μέγεθος του πίνακα, μπορείτε να χρησιμοποιήσετε το 'ReDim' για να το μεγεθύνετε εκ νέου, αλλά πρέπει να χρησιμοποιήσετε τη λέξη-κλειδί "Διατήρηση" εάν δεν θέλετε να χάσετε τα δεδομένα που υπάρχουν ήδη στον πίνακα. Το μέγεθος μιας συλλογής δεν χρειάζεται να οριστεί. Απλώς μεγαλώνει και συρρικνώνεται αυτόματα καθώς προστίθενται ή αφαιρούνται αντικείμενα.

Πεδίο εφαρμογής αντικειμένου συλλογής

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

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

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

1 Global MyCollection As New Collection

Δημιουργία συλλογής, προσθήκη στοιχείων και πρόσβαση σε στοιχεία

Ένα απλό αντικείμενο συλλογής μπορεί να δημιουργηθεί στο VBA χρησιμοποιώντας τον ακόλουθο κώδικα:

123456 Sub CreateCollection ()Dim MyCollection As New CollectionMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2"MyCollection.Προσθήκη "Item3"Τέλος υπο

Ο κώδικας διαστασιοποιεί ένα νέο αντικείμενο που ονομάζεται «MyCollection» και στη συνέχεια οι ακόλουθες γραμμές κώδικα χρησιμοποιούν τη μέθοδο Προσθήκη για να προσθέσουν 3 νέες τιμές.

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

123 Για κάθε στοιχείο της συλλογής μουΣτοιχείο MsgBoxΕπόμενο Στοιχείο

Μπορείτε επίσης να επαναλάβετε τη συλλογή σας χρησιμοποιώντας ένα For Next Loop:

123 Για n = 1 Προς MyCollection.CountMsgBox MyCollection (n)Επόμενο n

Ο κώδικας παίρνει το μέγεθος της συλλογής χρησιμοποιώντας την ιδιότητα Count και στη συνέχεια χρησιμοποιεί αυτήν ξεκινώντας μια τιμή 1 για να ευρετηριάσει κάθε στοιχείο

Ο βρόχος Για κάθε βρόχο είναι γρηγορότερος από τον βρόχο Για Επόμενο, αλλά λειτουργεί μόνο προς μία κατεύθυνση (χαμηλός δείκτης έως υψηλός). Το For Next Loop έχει το πλεονέκτημα ότι μπορείτε να χρησιμοποιήσετε διαφορετική κατεύθυνση (υψηλό δείκτη σε χαμηλό) και μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο Βήμα για να αλλάξετε την προσαύξηση. Αυτό είναι χρήσιμο όταν θέλετε να διαγράψετε πολλά στοιχεία αφού θα χρειαστεί να εκτελέσετε τη διαγραφή από το τέλος της συλλογής στην αρχή καθώς το ευρετήριο θα αλλάξει καθώς πραγματοποιούνται οι διαγραφές.

Η μέθοδος Προσθήκη σε μια συλλογή έχει 3 προαιρετικές παραμέτρους - Κλειδί, Πριν και Μετά

Μπορείτε να χρησιμοποιήσετε τις παραμέτρους "Πριν" και "Μετά" για να καθορίσετε τη θέση του νέου σας στοιχείου σε σχέση με τα άλλα που υπάρχουν ήδη στη συλλογή

Αυτό γίνεται καθορίζοντας τον αριθμό ευρετηρίου με τον οποίο θέλετε να σχετίζεται το νέο σας στοιχείο.

123456 Sub CreateCollection ()Dim MyCollection As New CollectionMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2",, 1MyCollection.Προσθήκη "Item3"Τέλος υπο

Σε αυτό το παράδειγμα, το "Item2" έχει οριστεί να προστεθεί πριν από το πρώτο ευρετηριασμένο στοιχείο στη συλλογή (το οποίο είναι "Item1"). Κατά την επανάληψη αυτής της συλλογής, θα εμφανιστεί πρώτα το "Item2", ακολουθούμενο από το "Item1" και "Item3"

Όταν καθορίζετε μια παράμετρο "Πριν" ή "Μετά", η τιμή του ευρετηρίου προσαρμόζεται αυτόματα μέσα στη συλλογή, έτσι ώστε το "Στοιχείο 2" να γίνει τιμή ευρετηρίου 1 και το "Στοιχείο 1" να μετακινείται σε τιμή ευρετηρίου 2

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

1234567 Sub CreateCollection ()Dim MyCollection As New CollectionMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2", "MyKey"MyCollection.Προσθήκη "Item3"MsgBox MyCollection ("MyKey")Τέλος υπο

Στο "Item2" έχει δοθεί μια τιμή "Key" του "MyKey", ώστε να μπορείτε να ανατρέξετε σε αυτό το στοιχείο χρησιμοποιώντας την τιμή του "MyKey" αντί για τον αριθμό ευρετηρίου (2)

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

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

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

Μπορείτε να χρησιμοποιήσετε τη μέθοδο "Κατάργηση" για να διαγράψετε στοιχεία από τη συλλογή σας.

1 MyCollection.Remove (2)

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

1 MyCollection.Remove ("MyKey")

Όταν ένα στοιχείο αφαιρείται από μια συλλογή, οι τιμές ευρετηρίου επαναφέρονται αυτόματα σε όλη τη διαδρομή της συλλογής. Αυτό είναι όπου η παράμετρος "Κλειδί" είναι τόσο χρήσιμη όταν διαγράφετε πολλά στοιχεία ταυτόχρονα. Για παράδειγμα, θα μπορούσατε να διαγράψετε το ευρετήριο στοιχείων 105 και ο δείκτης στοιχείων 106 γίνεται αμέσως δείκτης 105, και όλα όσα βρίσκονται πάνω από αυτό το στοιχείο μετακινούνται προς τα κάτω. Εάν χρησιμοποιείτε την παράμετρο Key, δεν χρειάζεται να ανησυχείτε για το ποια τιμή ευρετηρίου πρέπει να αφαιρεθεί.

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

1 Dim MyCollection As New Collection

Για να καταργήσετε εντελώς το πραγματικό αντικείμενο συλλογής, μπορείτε να ορίσετε το αντικείμενο σε τίποτα

1 Ορισμός MyCollection = Τίποτα

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

Μετρήστε τον αριθμό των στοιχείων σε μια συλλογή

Μπορείτε εύκολα να μάθετε τον αριθμό των αντικειμένων της συλλογής σας χρησιμοποιώντας την ιδιότητα «Καταμέτρηση»

1 MsgBox MyCollection.Count

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

Δοκιμή συλλογής για μια συγκεκριμένη τιμή

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

123456789101112 Sub SearchCollection ()Dim MyCollection ως νέα συλλογήMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2"MyCollection.Προσθήκη "Item3"Για κάθε στοιχείο της συλλογής μουΑν Item = "Item2" ΤότεΣτοιχείο MsgBox & "Βρέθηκε"Τέλος εανΕπόμενοΤέλος υπο

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

Ένα από τα μειονεκτήματα αυτής της μεθοδολογίας είναι ότι δεν μπορείτε να αποκτήσετε πρόσβαση στην τιμή ευρετηρίου ή στην τιμή κλειδιού

Εάν χρησιμοποιείτε έναν Επόμενο βρόχο αντ 'αυτού, μπορείτε να χρησιμοποιήσετε τον μετρητή Για Επόμενο για να λάβετε την τιμή ευρετηρίου, αν και δεν μπορείτε ακόμα να λάβετε την τιμή "Κλειδί"

123456789101112 Sub SearchCollection ()Dim MyCollection As New CollectionMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2"MyCollection.Προσθήκη "Item3"Για n = 1 Προς MyCollection.CountΕάν MyCollection.Item (n) = "Item2" ΤότεMsgBox MyCollection.Item (n) & "found in index position" & nΤέλος εανΕπόμενο nΤέλος υπο

Ο μετρητής For Next (n) θα παρέχει τη θέση του ευρετηρίου

Ταξινόμηση μιας Συλλογής

Δεν υπάρχει ενσωματωμένη λειτουργικότητα για να ταξινομήσετε μια συλλογή, αλλά χρησιμοποιώντας μια σκέψη «εκτός κουτιού», ο κώδικας μπορεί να γραφτεί για να κάνει μια ταξινόμηση, χρησιμοποιώντας τη λειτουργία ταξινόμησης φύλλου εργασίας του Excel. Αυτός ο κώδικας χρησιμοποιεί ένα κενό φύλλο εργασίας που ονομάζεται "SortSheet" για να κάνει την πραγματική ταξινόμηση.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 Sub SortCollection ()Dim MyCollection As New CollectionDim Counter Όσο καιρό«Δημιουργήστε συλλογή με στοιχεία τυχαίας παραγγελίαςMyCollection.Προσθήκη "Item5"MyCollection.Προσθήκη "Item2"MyCollection.Προσθήκη "Item4"MyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item3"«Αποτυπώστε τον αριθμό των στοιχείων στη συλλογή για μελλοντική χρήσηΜετρητής = MyCollection.Count"Επαναλάβετε τη συλλογή αντιγράφοντας κάθε στοιχείο σε ένα διαδοχικό κελί στο" SortSheet "(στήλη A)Για n = 1 Προς MyCollection.CountΦύλλα ("Ταξινόμηση φύλλου"). Κελιά (n, 1) = MyCollection (n)Επόμενο n«Ενεργοποιήστε το φύλλο ταξινόμησης και χρησιμοποιήστε τη ρουτίνα ταξινόμησης Excel για να ταξινομήσετε τα δεδομένα σε αύξουσα σειράΦύλλα ("Ταξινόμηση φύλλου"). ΕνεργοποιήστεΕύρος ("A1: A" & MyCollection.Count). ΕπιλέξτεActiveWorkbook.Worksheets ("SortSheet"). Sort.SortFields.ClearActiveWorkbook.Worksheets ("SortSheet"). Sort.SortFields.Add2 Key: = Range (_"A1: A5"), SortOn: = xlSortOnValues, Order: = xlΑύξουσα, DataOption: = _xlSortNormalΜε ActiveWorkbook.Worksheets ("SortSheet"). Ταξινόμηση.SetRange Range ("A1: A5").Header = xlGuess.MatchCase = Λάθος. Προσανατολισμός = xlTopToBottom.SortMethod = xlPinYin.ΙσχύουνΤέλος με«Διαγράψτε όλα τα στοιχεία της συλλογής - σημειώστε ότι αυτό το For Next Loop εκτελείται με αντίστροφη σειράΓια n = MyCollection.Count To 1 Step -1MyCollection.Remove (n)Επόμενο n"Αντιγράψτε τις τιμές κελιού πίσω στο κενό αντικείμενο συλλογής χρησιμοποιώντας την αποθηκευμένη τιμή (Μετρητής) για τον βρόχο"Για n = 1 στον μετρητήMyCollection.Add Sheets ("SortSheet"). Cells (n, 1) .ValueΕπόμενο n«Επαναλάβετε τη συλλογή για να αποδείξετε τη σειρά με την οποία βρίσκονται τώρα τα αντικείμεναΓια κάθε στοιχείο της συλλογής μουΣτοιχείο MsgBoxΕπόμενο Στοιχείο«Διαγράψτε το φύλλο εργασίας (φύλλο ταξινόμησης) - εάν είναι απαραίτητο, διαγράψτε το επίσηςΦύλλα ("Ταξινόμηση φύλλου"). Εύρος (Κελιά (1, 1), Κελιά (Μετρητής, 1)). ΔιαγραφήΤέλος υπο

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

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

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

Τέλος, χρησιμοποιώντας άλλο For Next Loop, οι τιμές των στοιχείων μεταφέρονται πίσω στην κενή συλλογή

Ένα περαιτέρω For Every Loop αποδεικνύει ότι η συλλογή είναι πλέον σε καλή αύξουσα σειρά.

Δυστυχώς, αυτό δεν ασχολείται με οποιεσδήποτε τιμές κλειδιών που ενδέχεται να έχουν εισαχθεί αρχικά, καθώς οι τιμές κλειδιών δεν μπορούν να διαβαστούν

Μεταφορά συλλογής σε υπο / λειτουργία

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

1 Λειτουργία MyFunction (ByRef MyCollection as Collection)

Είναι σημαντικό να περάσετε τη συλλογή χρησιμοποιώντας το "ByRef". Αυτό σημαίνει ότι χρησιμοποιείται η αρχική συλλογή. Εάν η συλλογή περάσει χρησιμοποιώντας το "ByVal" τότε αυτό δημιουργεί ένα αντίγραφο της συλλογής το οποίο μπορεί να έχει ατυχείς επιπτώσεις

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

Επιστροφή μιας συλλογής από μια συνάρτηση

Μπορείτε να επιστρέψετε μια συλλογή από μια λειτουργία με τον ίδιο τρόπο όπως η επιστροφή οποιουδήποτε αντικειμένου. Πρέπει να χρησιμοποιήσετε τη λέξη -κλειδί Set

12345 Sub ReturnFromFunction ()Dim MyCollection As CollectionΟρισμός MyCollection = PopulateCollectionMsgBox MyCollection.CountΤέλος υπο

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

1234567 Λειτουργία PopulateCollection () Ως ΣυλλογήDim MyCollection As New CollectionMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2"Ορισμός PopulateCollection = MyCollectionΛειτουργία Τέλους

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

Μετατροπή συλλογής σε πίνακα

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

Παρατηρήστε ότι ο δείκτης συλλογής ξεκινά από το 1 ενώ ο δείκτης συστοιχίας ξεκινά από το 0. Ενώ η συλλογή έχει 3 στοιχεία, ο πίνακας χρειάζεται μόνο να διαστασιοποιηθεί σε 2 επειδή υπάρχει ένα στοιχείο 0

1234567891011121314151617 Sub ConvertCollectionToArray ()Dim MyCollection As New CollectionDim MyArray (2) As StringMyCollection.Προσθήκη "Item1"MyCollection.Προσθήκη "Item2"MyCollection.Προσθήκη "Item3"Για n = 1 Προς MyCollection.CountMyArray (n - 1) = MyCollection (n)Επόμενο nΓια n = 0 έως 2MsgBox MyArray (n)Επόμενο nΤέλος υπο

Μετατροπή πίνακα σε συλλογή

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

Λάβετε υπόψη ότι αυτό θα λειτουργήσει μόνο για μία μόνο διάσταση του πίνακα επειδή η συλλογή έχει μόνο μία διάσταση

123456789101112131415 Sub ConvertArrayIntoCollection ()Dim MyCollection As New CollectionDim MyArray (2) As StringMyArray (0) = "item1"MyArray (1) = "Στοιχείο 2"MyArray (2) = "Στοιχείο 3"Για n = 0 έως 2MyCollection.Add MyArray (n)Επόμενο nΓια κάθε στοιχείο της συλλογής μουΣτοιχείο MsgBoxΕπόμενο ΣτοιχείοΤέλος υπο

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

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

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

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

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

wave wave wave wave wave