Ένα αντικείμενο ArrayList είναι παρόμοιο με ένα αντικείμενο συλλογής, αλλά έχει πολύ περισσότερες μεθόδους και ιδιότητες, και ως εκ τούτου πολύ μεγαλύτερη ευελιξία από άποψη προγραμματισμού.
Ένα αντικείμενο συλλογής έχει μόνο δύο μεθόδους (Προσθήκη, Κατάργηση) και δύο ιδιότητες (Καταμέτρηση, Στοιχείο), ενώ μια λίστα συστοιχιών έχει πολλές άλλες. Επίσης, το αντικείμενο συλλογής διαβάζεται μόνο. Μόλις προστεθούν τιμές, η τιμή ευρετηρίου δεν μπορεί να αλλάξει, ενώ σε μια λίστα συστοιχιών, είναι δυνατή η επεξεργασία.
Πολλές από τις μεθόδους Array List χρησιμοποιούν παραμέτρους. Σε αντίθεση με πολλές από τις τυπικές μεθόδους VBA, καμία από αυτές τις παραμέτρους δεν είναι προαιρετική. Επίσης, ορισμένες από τις μεθόδους και τις ιδιότητες δεν κεφαλαιοποιούνται πάντα όταν εισάγονται με τον ίδιο τρόπο που κάνουν στο Excel VBA. Ωστόσο, εξακολουθούν να λειτουργούν.
Το αντικείμενο ArrayList επεκτείνεται και συρρικνώνεται σε μέγεθος ανάλογα με το πόσα στοιχεία περιέχει. Δεν χρειάζεται να έχει διαστάσεις πριν από τη χρήση σαν πίνακας.
Η λίστα συστοιχιών είναι μονοδιάστατη (ίδια με το αντικείμενο συλλογής) και ο προεπιλεγμένος τύπος δεδομένων είναι Variant, πράγμα που σημαίνει ότι θα δέχεται οποιοδήποτε τύπο δεδομένων, είτε πρόκειται για αριθμητικό, κείμενο είτε για ημερομηνία.
Με πολλούς τρόπους, η λίστα συστοιχιών αντιμετωπίζει μια σειρά από ελλείψεις του αντικειμένου συλλογής. Είναι σίγουρα πολύ πιο ευέλικτο σε αυτό που μπορεί να κάνει.
Το αντικείμενο της λίστας συστοιχιών δεν αποτελεί μέρος της τυπικής βιβλιοθήκης VBA. Μπορείτε να το χρησιμοποιήσετε στον κώδικα Excel VBA χρησιμοποιώντας αργή ή πρώιμη σύνδεση
1234 | Sub LateBindingExample ()Dim MyList As ObjectΟρισμός MyList = CreateObject ("System.Collections.ArrayList")Τέλος υπο |
123 | Sub EarlyBindingExample ()Dim MyList As New ArrayListΤέλος υπο |
Για να χρησιμοποιήσετε το παράδειγμα της πρώιμης δέσμευσης, πρέπει πρώτα να εισαγάγετε μια αναφορά στο VBA στο αρχείο «mscorlib.tlb»
Το κάνετε αυτό επιλέγοντας «Εργαλεία | Παραπομπές «από το παράθυρο της Visual Basic Editor (VBE). Θα εμφανιστεί ένα αναδυόμενο παράθυρο με όλες τις διαθέσιμες αναφορές. Κάντε κύλιση προς τα κάτω στο ‘mscorlib.dll’ και σημειώστε το πλαίσιο δίπλα του. Κάντε κλικ στο κουμπί OK και αυτή η βιβλιοθήκη είναι τώρα μέρος του έργου σας:
Ένα από τα μεγάλα μειονεκτήματα ενός αντικειμένου Array List είναι ότι δεν διαθέτει "Intellisense". Κανονικά, όπου χρησιμοποιείτε ένα αντικείμενο στο VBA, όπως ένα εύρος, θα δείτε μια αναδυόμενη λίστα με όλες τις διαθέσιμες ιδιότητες και μεθόδους. Δεν το λαμβάνετε με ένα αντικείμενο λίστας πίνακα και μερικές φορές χρειάζεται προσεκτικό έλεγχο για να βεβαιωθείτε ότι έχετε γράψει σωστά τη μέθοδο ή την ιδιότητα.
Επίσης, αν πατήσετε F2 στο παράθυρο VBE και κάνετε αναζήτηση στο «arraylist», δεν θα εμφανιστεί τίποτα, κάτι που δεν είναι πολύ χρήσιμο για έναν προγραμματιστή.
Ο κώδικάς σας θα εκτελείται πολύ πιο γρήγορα με την έγκαιρη δέσμευση, επειδή είναι όλα συγκεντρωμένα από πριν. Με καθυστερημένη δέσμευση, το αντικείμενο πρέπει να μεταγλωττιστεί καθώς εκτελείται ο κώδικας
Διανομή της εφαρμογής Excel που περιέχει μια λίστα συστοιχιών
Όπως ήδη επισημάνθηκε, το αντικείμενο ArrayList δεν αποτελεί μέρος του Excel VBA. Αυτό σημαίνει ότι οποιοσδήποτε από τους συναδέλφους σας στους οποίους διανέμετε την εφαρμογή πρέπει να έχει πρόσβαση στο αρχείο «mscorlib.tlb»
Αυτό το αρχείο συνήθως βρίσκεται σε:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
Αξίζει να γράψετε κάποιο κώδικα (χρησιμοποιώντας τη μέθοδο Dir) για να ελέγξετε εάν αυτό το αρχείο υπάρχει όταν ένας χρήστης φορτώνει την εφαρμογή, ώστε να αντιμετωπίσει μια «μαλακή προσγείωση» αν δεν βρεθεί. Εάν δεν υπάρχει και ο κώδικας εκτελείται τότε θα προκύψουν σφάλματα.
Επίσης, ο χρήστης πρέπει να έχει εγκατεστημένη τη σωστή έκδοση .Net Framework. Ακόμα κι αν ο χρήστης έχει νεότερη έκδοση, το V3.5 πρέπει να εγκατασταθεί διαφορετικά η εφαρμογή σας δεν θα λειτουργήσει
Πεδίο εφαρμογής ενός αντικειμένου λίστας πίνακα
Όσον αφορά το πεδίο εφαρμογής, το αντικείμενο της λίστας συστοιχιών είναι διαθέσιμο μόνο ενώ το βιβλίο εργασίας είναι ανοιχτό. Δεν αποθηκεύεται όταν αποθηκεύεται το βιβλίο εργασίας. Εάν το βιβλίο εργασίας ανοίξει ξανά, το αντικείμενο της λίστας συστοιχιών πρέπει να δημιουργηθεί εκ νέου χρησιμοποιώντας κώδικα VBA.
Εάν θέλετε η λίστα συστοιχιών σας να είναι διαθέσιμη σε όλο τον κώδικα στη μονάδα κώδικα, τότε πρέπει να δηλώσετε το αντικείμενο λίστας πίνακα στην ενότητα Δήλωση στο επάνω μέρος του παραθύρου της ενότητας
Αυτό θα διασφαλίσει ότι όλος ο κώδικάς σας σε αυτήν την ενότητα μπορεί να έχει πρόσβαση στη λίστα συστοιχιών. Εάν θέλετε οποιαδήποτε ενότητα μέσα στο βιβλίο εργασίας σας να έχει πρόσβαση στο αντικείμενο της Λίστας συστοιχιών, ορίστε το ως καθολικό αντικείμενο
1 | Global MyCollection As New ArrayList |
Συμπλήρωση και ανάγνωση από τη λίστα συστοιχιών σας
Η πιο βασική ενέργεια που θέλετε να κάνετε είναι να δημιουργήσετε μια λίστα συστοιχιών, να βάλετε κάποια δεδομένα σε αυτήν και στη συνέχεια να αποδείξετε ότι τα δεδομένα μπορούν να διαβαστούν. Όλα τα παραδείγματα κώδικα σε αυτό το άρθρο υποθέτουν ότι χρησιμοποιείτε πρόωρη σύνδεση και έχετε προσθέσει το «mscorlib.tlb» στις αναφορές VBA, όπως περιγράφεται παραπάνω
123456789101112 | Sub ArrayListExample ()‘Δημιουργία νέου αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίσταMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"«Επαναλάβετε τη λίστα πίνακα για να αποδείξετε τιμέςΓια N = 0 Στο MyList.Count - 1MsgBox MyList (N)Επόμενο ΝΤέλος υπο |
Αυτό το παράδειγμα δημιουργεί ένα νέο αντικείμενο ArrayList, το συμπληρώνει με 3 στοιχεία και επαναλαμβάνεται μέσω της λίστας που εμφανίζει κάθε στοιχείο.
Λάβετε υπόψη ότι το ευρετήριο ArrayList ξεκινά από το 0 και όχι από το 1, οπότε πρέπει να αφαιρέσετε το 1 από την τιμή Count
Μπορείτε επίσης να χρησιμοποιήσετε ένα βρόχο "Για … Κάθε" για να διαβάσετε τις τιμές:
123456789101112 | Sub ArrayListExample ()‘Δημιουργία νέου αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίσταMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"«Επαναλάβετε τη λίστα πίνακα για να αποδείξετε τιμέςΓια κάθε ένα στη λίστα μουMsgBox ΙΣτη συνέχεια εγώΤέλος υπο |
Επεξεργασία και αλλαγή στοιχείων σε μια λίστα συστοιχιών
Ένα σημαντικό πλεονέκτημα μιας λίστας συστοιχιών έναντι μιας συλλογής είναι ότι τα στοιχεία της λίστας μπορούν να επεξεργαστούν και να αλλάξουν μέσα στον κώδικά σας. Το αντικείμενο συλλογής διαβάζεται μόνο ενώ το αντικείμενο της λίστας συστοιχιών διαβάζεται / γράφει
123456789101112131415 | Sub ArrayListExample ()‘Δημιουργία νέου αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίσταMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3""Αλλαγή στοιχείου 1 από" Στοιχείο 2 "σε" Αλλαγή "MyList (1) = "Άλλαξε"«Επαναλάβετε τη λίστα συστοιχιών για να αποδείξετε ότι η αλλαγή λειτούργησεΓια κάθε ένα στη λίστα μου«Εμφάνιση ονόματος στοιχείουMsgBox ΙΣτη συνέχεια εγώΤέλος υπο |
Σε αυτό το παράδειγμα, το δεύτερο στοιχείο, "Item2" αλλάζει στην τιμή "Changed" (θυμηθείτε ότι ο δείκτης ξεκινά από το 0). Όταν εκτελεστεί η επανάληψη στο τέλος του κώδικα, θα εμφανιστεί η νέα τιμή
Προσθήκη πίνακα τιμών σε λίστα πίνακα
Μπορείτε να εισαγάγετε τιμές στη λίστα συστοιχιών σας χρησιμοποιώντας έναν πίνακα που περιέχει μια λίστα με αυτές τις τιμές ή αναφορές σε τιμές κελιού σε ένα φύλλο εργασίας
123456789101112131415161718 | Sub AddArrayExample ()‘Δημιουργία αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Επαναλαμβάνεται μέσω τιμών πίνακα προσθέτοντάς τις στη λίστα πίνακαΓια κάθε v In Array ("A1", "A2", "A3")«Προσθέστε κάθε τιμή πίνακα στη λίσταMyList.Add vΕπόμενο«Επαναλαμβάνεται μέσω τιμών πίνακα με αναφορές φύλλου εργασίας που τις προσθέτουν στη λίστα πίνακαΓια κάθε v In Array (Range ("A5"). Value, Range ("A6"). Value)MyList.Add vΕπόμενο«Επαναλάβετε τη λίστα πίνακα για να αποδείξετε τιμέςΓια N = 0 Στο MyList.Count - 1«Εμφάνιση στοιχείου λίσταςMsgBox MyList.Item (N)Επόμενο ΝΤέλος υπο |
Ανάγνωση / Ανάκτηση μιας σειράς στοιχείων από μια λίστα συστοιχιών
Χρησιμοποιώντας τη μέθοδο GetRange σε μια λίστα συστοιχιών, μπορείτε να καθορίσετε μια οργή συνεχόμενων στοιχείων που θα ανακτηθούν. Οι δύο παράμετροι που απαιτούνται είναι η αρχική θέση του δείκτη και ο αριθμός των στοιχείων που πρέπει να ανακτηθούν. Ο κώδικας συμπληρώνει ένα δεύτερο αντικείμενο λίστας συστοιχιών με το υποσύνολο στοιχείων που μπορούν στη συνέχεια να διαβαστούν ξεχωριστά.
123456789101112131415161718 | Sub ReadRangeExample ()‘Ορίστε αντικείμεναDim MyList As New ArrayList, MyList1 As Object"Προσθήκη στοιχείων στο αντικείμενο" MyList "MyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"MyList.Προσθήκη "Item6"MyList.Προσθήκη "Item4"MyList.Προσθήκη "Item7""Καταγράψτε 4 στοιχεία στο" MyList "ξεκινώντας από τη θέση ευρετηρίου 2Ορισμός MyList1 = MyList.GetRange (2, 4)"Επαναλάβετε το αντικείμενο" MyList1 "για να εμφανίσετε το υποσύνολο στοιχείωνΓια κάθε ένα στο MyList1«Εμφάνιση ονόματος στοιχείουMsgBox ΙΣτη συνέχεια εγώΤέλος υπο |
Αναζήτηση για στοιχεία μέσα σε μια λίστα συστοιχιών
Μπορείτε να ελέγξετε εάν ένα όνομα με όνομα είναι στη λίστα σας χρησιμοποιώντας τη μέθοδο "Περιέχει". Αυτό θα επιστρέψει Σωστό ή Λάθος
1 | MsgBox MyList.Contains ("Item2") |
Μπορείτε επίσης να βρείτε την πραγματική θέση ευρετηρίου χρησιμοποιώντας τη μέθοδο «IndexOf». Πρέπει να καθορίσετε το ευρετήριο έναρξης για την αναζήτηση (συνήθως 0). Η τιμή επιστροφής είναι ο δείκτης της πρώτης παρουσίας του στοιχείου που βρέθηκε. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε ένα βρόχο για να αλλάξετε το σημείο εκκίνησης στην επόμενη τιμή ευρετηρίου για να βρείτε περαιτέρω περιπτώσεις, εάν υπάρχουν πολλές διπλές τιμές.
Εάν η τιμή δεν βρεθεί, επιστρέφεται μια τιμή -1
Αυτό το παράδειγμα επιδεικνύει τη χρήση "Περιέχει", το στοιχείο δεν βρέθηκε και περιηγείται στη λίστα πίνακα για να βρείτε τη θέση όλων των διπλότυπων στοιχείων:
1234567891011121314151617181920212223242526 | Sub SearchListExample ()‘Ορισμός λίστας πίνακα και μεταβλητώνDim MyList As New ArrayList, Sp As Integer, Pos As Integer«Προσθέστε νέα στοιχεία, συμπεριλαμβανομένων διπλότυπωνMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"MyList.Προσθήκη "Item1"«Δοκιμή για το" Item2 "που βρίσκεται στη λίστα - επιστρέφει TrueMsgBox MyList.Contains ("Item2")«Λήψη ευρετηρίου ανύπαρκτης τιμής -επιστρέφει -1MsgBox MyList.IndexOf ("Στοιχείο", 0)‘Ορίστε τη θέση έναρξης για την αναζήτηση στο μηδένSp = 0"Επαναλάβετε τη λίστα για να λάβετε όλες τις θέσεις του" Item1 "Κάνω"Λάβετε τη θέση ευρετηρίου του επόμενου" Στοιχείου 1 "με βάση τη θέση στη μεταβλητή" Sp "Pos = MyList.IndexOf ("Item1", Sp)"Εάν δεν βρεθούν άλλες περιπτώσεις" Στοιχείο 1 ", βγείτε από τον βρόχοΑν Pos = -1 Τότε Έξοδος Do«Εμφάνιση της επόμενης παρουσίας που βρέθηκε και της θέσης ευρετηρίουMsgBox MyList (Pos) & "στο ευρετήριο" & Pos"Προσθέστε 1 στην τελευταία τιμή ευρετηρίου - αυτή τώρα γίνεται η νέα θέση έναρξης για την επόμενη αναζήτησηSp = Pos + 1ΒρόχοςΤέλος υπο |
Λάβετε υπόψη ότι το κείμενο αναζήτησης που χρησιμοποιείται είναι κεφαλαίο και οι μπαλαντέρ δεν γίνονται αποδεκτές.
Εισαγωγή και αφαίρεση στοιχείων
Εάν δεν θέλετε να προσθέσετε τα στοιχεία σας στο τέλος της λίστας, μπορείτε να τα εισαγάγετε σε μια συγκεκριμένη θέση ευρετηρίου, έτσι ώστε το νέο στοιχείο να βρίσκεται στη μέση της λίστας. Οι αριθμοί ευρετηρίου θα προσαρμοστούν αυτόματα για τα επόμενα στοιχεία.
123456789101112131415 | Sub InsertExample ()‘Ορισμός αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίστα συστοιχιώνMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"MyList.Προσθήκη "Item1"«Εισαγάγετε το« Στοιχείο 6 »στη θέση δείκτη 2MyList.Insert 2, "Item6"«Επαναλάβετε τα στοιχεία της λίστας πίνακα για να εμφανίσετε τη νέα σειρά και ευρετήριοΓια N = 0 Στο MyList.Count - 1MsgBox MyList (N) & "Index" & NΕπόμενο ΝΤέλος υπο |
Σε αυτό το παράδειγμα, το «Στοιχείο6» προστίθεται στη λίστα στη θέση ευρετηρίου 2, οπότε το «στοιχείο3» που ήταν στη θέση δείκτη 2 μεταβαίνει τώρα στη θέση ευρετηρίου 3
Ένα μεμονωμένο στοιχείο μπορεί να αφαιρεθεί χρησιμοποιώντας τη μέθοδο "Κατάργηση".
1 | MyList.Αφαίρεση "Στοιχείου" |
Λάβετε υπόψη ότι δεν υπάρχει σφάλμα εάν δεν βρεθεί το όνομα του στοιχείου. Όλοι οι επόμενοι αριθμοί ευρετηρίου θα αλλάξουν ανάλογα με την αφαίρεση.
Εάν γνωρίζετε τη θέση ευρετηρίου του στοιχείου, μπορείτε να χρησιμοποιήσετε τη μέθοδο «RemoveAt» π.χ.
1 | MyList.RemoveAt 2 |
Λάβετε υπόψη ότι εάν η θέση ευρετηρίου που είναι μεγαλύτερη από τον αριθμό των στοιχείων στη λίστα πίνακα, τότε θα επιστρέψει ένα σφάλμα.
Μπορείτε να καταργήσετε μια σειρά τιμών από τη λίστα χρησιμοποιώντας τη μέθοδο "RemoveRange". Οι παράμετροι είναι ο δείκτης έναρξης και στη συνέχεια ο αριθμός των στοιχείων που πρέπει να αφαιρεθούν π.χ.
1 | MyList.RemoveRange 3, 2 |
Σημειώστε ότι θα λάβετε ένα σφάλμα στον κωδικό σας εάν ο αριθμός των στοιχείων που αντισταθμίζονται από την τιμή έναρξης είναι μεγαλύτερος από τον αριθμό των στοιχείων στη λίστα πίνακα.
Και στις δύο μεθόδους "RemoveAt" και "RemoveRange", θα ήταν σκόπιμο κάποιος κώδικας να ελέγξει εάν οι καθορισμένοι αριθμοί ευρετηρίου είναι μεγαλύτεροι από τον συνολικό αριθμό στοιχείων στη λίστα πίνακα, προκειμένου να παγιδευτούν τυχόν σφάλματα. Η ιδιότητα "Count" θα δώσει τον συνολικό αριθμό στοιχείων στη λίστα πίνακα.
12345678910111213141516171819202122232425 | Sub RemoveExample ()‘Ορισμός αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίστα συστοιχιώνMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"MyList.Προσθήκη "Item1"MyList.Προσθήκη "Item4"MyList.Προσθήκη "Item5"«Εισαγάγετε το« Στοιχείο 6 »στη θέση δείκτη 2MyList.Insert 2, "Item6""Κατάργηση" Στοιχείου 2 "MyList.Remove "Item2""Κατάργηση" Στοιχείου " - αυτό δεν υπάρχει στη λίστα πίνακα, αλλά δεν παρουσιάζει σφάλμαMyList.Αφαίρεση "Στοιχείου"«Αφαιρέστε το στοιχείο στη θέση ευρετηρίου 2MyList.RemoveAt 2«Αφαιρέστε 2 συνεχόμενα στοιχεία ξεκινώντας από τη θέση δείκτη 2MyList.RemoveRange 3, 2«Επαναλάβετε τη λίστα πίνακα για να δείξετε τι απομένει και σε ποια θέση ευρετηρίου βρίσκεται τώραΓια N = 0 Στο MyList.Count - 1MsgBox MyList (N) & "Index" & NΕπόμενο ΝΤέλος υπο |
Λάβετε υπόψη ότι εάν χρησιμοποιείτε το "RemoveAt" για να αφαιρέσετε ένα στοιχείο σε μια συγκεκριμένη θέση, τότε μόλις αφαιρεθεί αυτό το στοιχείο, αλλάζουν όλες οι επόμενες θέσεις ευρετηρίου. Εάν έχετε πολλαπλές καταργήσεις χρησιμοποιώντας τη θέση ευρετηρίου, τότε μια καλή ιδέα είναι να ξεκινήσετε με τον υψηλότερο αριθμό ευρετηρίου και να πάτε προς τα κάτω στη θέση μηδέν, έτσι ώστε να αφαιρείτε πάντα το σωστό στοιχείο. Με αυτόν τον τρόπο δεν θα έχετε το πρόβλημα
Ταξινόμηση λίστας συστοιχιών
Ένα άλλο μεγάλο πλεονέκτημα έναντι μιας συλλογής είναι ότι μπορείτε να ταξινομήσετε τα αντικείμενα σε αύξουσα ή φθίνουσα σειρά.
Το αντικείμενο της λίστας συστοιχιών είναι το μόνο αντικείμενο στο Excel VBA με μέθοδο ταξινόμησης. Η μέθοδος ταξινόμησης είναι πολύ γρήγορη και αυτό μπορεί να είναι ένα σημαντικό στοιχείο για τη χρήση μιας λίστας συστοιχιών.
Στο αντικείμενο συλλογής, απαιτήθηκε κάποια σκέψη «εκτός κουτιού» για να ταξινομηθούν όλα τα στοιχεία, αλλά με μια λίστα συστοιχιών, είναι πολύ απλό.
Η μέθοδος «Ταξινόμηση» ταξινομεί κατά αύξουσα σειρά και η μέθοδος «Αντίστροφη» ταξινομεί με φθίνουσα σειρά.
12345678910111213141516171819202122 | Sub ArrayListExample ()«Δημιουργία αντικειμένου λίστας συστοιχιώνDim MyList As New ArrayList«Προσθέστε στοιχεία με μη ταξινομημένη σειράMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item3"MyList.Προσθήκη "Item2"«Ταξινόμηση των στοιχείων σε αύξουσα σειράMyList.Sort«Επαναλάβετε τα στοιχεία για να δείξετε αύξουσα σειράΓια κάθε ένα στη λίστα μου«Εμφάνιση ονόματος στοιχείουMsgBox ΙΣτη συνέχεια εγώ«Ταξινόμηση των στοιχείων σε φθίνουσα σειράMyList.Reverse«Επαναλάβετε τα στοιχεία για να εμφανίσετε φθίνουσα σειράΓια κάθε ένα στη λίστα μου«Εμφάνιση ονόματος στοιχείουMsgBox ΙΣτη συνέχεια εγώΤέλος υπο |
Κλωνοποίηση λίστας συστοιχιών
Μια λίστα συστοιχιών έχει τη δυνατότητα να δημιουργήσει έναν κλώνο ή αντίγραφο του εαυτού της. Αυτό είναι χρήσιμο εάν ένας χρήστης κάνει αλλαγές στα στοιχεία χρησιμοποιώντας το μπροστινό μέρος και τον κωδικό VBA, αλλά πρέπει να διατηρήσετε ένα αντίγραφο των στοιχείων στην αρχική τους κατάσταση ως αντίγραφο ασφαλείας.
Αυτό θα μπορούσε να παρέχει στον χρήστη μια λειτουργία «Αναίρεση». Μπορεί να έχουν κάνει τις αλλαγές και να επιθυμούν να επιστρέψουν στην αρχική λίστα.
123456789101112131415 | Sub CloneExample ()«Ορίστε δύο αντικείμενα - λίστα πίνακα και ένα αντικείμενοDim MyList As New ArrayList, MyList1 As Object«Συμπληρώστε το πρώτο αντικείμενο με στοιχείαMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"‘Αντιγραφή λίστας στο MyList1Ορισμός MyList1 = MyList.Clone«Επαναλάβετε μέσω του MyList1 για να αποδείξετε την κλωνοποίησηΓια κάθε ένα στο MyList1«Εμφάνιση ονόματος στοιχείουMsgBox ΙΣτη συνέχεια εγώΤέλος υπο |
Το "MyList1" περιέχει τώρα όλα τα στοιχεία από το "MyList" με την ίδια σειρά
Αντιγραφή πίνακα πίνακα σε συμβατικό αντικείμενο VBA Array
Μπορείτε να χρησιμοποιήσετε μια απλή μέθοδο για να αντιγράψετε τη λίστα πίνακα σε έναν κανονικό πίνακα VBA:
123456789101112131415 | Sub ArrayExample ()«Δημιουργήστε αντικείμενο λίστας πίνακα και ένα τυπικό αντικείμενο πίνακαDim MyList As New ArrayList, NewArray As Variant‘Συμπλήρωση λίστας συστοιχιών με στοιχείαMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"«Αντιγράψτε τη λίστα συστοιχιών στον νέο πίνακαNewArray = MyList.ToArray«Επαναλάβετε τη νέα συστοιχία - σημειώστε ότι ο αριθμός λίστας πίνακα παρέχει το μέγιστο ευρετήριοΓια N = 0 Στο MyList.Count - 1«Εμφάνιση ονόματος στοιχείουMsgBox NewArray (N)Επόμενο ΝΤέλος υπο |
Αντιγραφή πίνακα λίστας σε εύρος φύλλου εργασίας
Μπορείτε να αντιγράψετε τη λίστα συστοιχιών σας σε ένα συγκεκριμένο φύλλο εργασίας και αναφορά κελιού χωρίς να χρειάζεται να επαναλάβετε τη λίστα πίνακα. Χρειάζεται μόνο να καθορίσετε την πρώτη αναφορά κελιού
123456789101112131415 | Sub RangeExample ()‘Δημιουργία νέου αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθήκη στοιχείων στη λίσταMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"«Διαγράψτε το φύλλο στόχουΦύλλα ("Sheet1"). UsedRange.Clear«Αντιγράψτε στοιχεία σε μια σειράΦύλλα ("Sheet1"). Εύρος ("A1"). Αλλαγή μεγέθους (1, MyList.Count) .Value = MyList.toArray«Αντιγράψτε στοιχεία κάτω από μια στήληΦύλλα ("Sheet1"). Εύρος ("A5"). Αλλαγή μεγέθους (MyList.Count, 1). Αξία = _WorksheetFunction.Transpose (MyList.toArray)Τέλος υπο |
Αδειάστε όλα τα στοιχεία από μια λίστα συστοιχιών
Υπάρχει μια απλή συνάρτηση (Clear) για την πλήρη εκκαθάριση της λίστας πίνακα
1234567891011121314 | Sub ClearListExample ()‘Δημιουργία αντικειμένου λίστας πίνακαDim MyList As New ArrayList«Προσθέστε νέα στοιχείαMyList.Προσθήκη "Item1"MyList.Προσθήκη "Item2"MyList.Προσθήκη "Item3"«Εμφάνιση αριθμού στοιχείωνMsgBox MyList.Count«Διαγράψτε όλα τα στοιχείαMyList.Clear«Εμφάνιση αριθμού στοιχείων για να αποδείξετε ότι το σαφές λειτούργησεMsgBox MyList.CountΤέλος υπο |
Αυτό το παράδειγμα δημιουργεί στοιχεία σε μια λίστα πίνακα και στη συνέχεια διαγράφει τη λίστα πίνακα. Τα πλαίσια μηνυμάτων αποδεικνύουν πριν και μετά τον αριθμό των στοιχείων στη λίστα πίνακα.
Σύνοψη μεθόδων λίστας πίνακα για το Excel VBA
Εργο | Παράμετροι | Παραδείγματα |
Προσθήκη / Επεξεργασία στοιχείου | αξία | MyList.Προσθήκη "Item1" |
MyList (4) = "Στοιχείο 2" | ||
Κλωνοποίηση λίστας συστοιχιών | Κανένας | Dim MyList As Object |
Ορισμός MyList2 = MyList.Clone | ||
Αντιγραφή στον πίνακα | Κανένας | Dim MyArray As Variant |
MyArray = MyList.ToArray | ||
Αντιγραφή σε εύρος φύλλου εργασίας (σειρά) | Κανένας | Φύλλα ("Sheet1"). Εύρος ("A1"). Αλλαγή μεγέθους (1, MyList.Count). Value = MyList.ToArray |
Αντιγραφή σε εύρος φύλλου εργασίας (στήλη) | Κανένας | Φύλλα ("Sheet1"). Εύρος ("A3"). Αλλαγή μεγέθους (MyList.Count, 1). Value = WorksheetFunction.Transpose (MyList.ToArray) |
Δημιουργώ | "System.Collections.ArrayList" | Dim MyList As Object |
Ορισμός MyList = CreateObject ("System.Collections.ArrayList") | ||
Δηλώνω | N/A | Dim MyList As Object |
Βρείτε / ελέγξτε αν υπάρχει στοιχείο | Στοιχείο για εύρεση | MyList.Contains ("Item2") |
Βρείτε τη θέση ενός στοιχείου στη ArrayList | 1. Αντικείμενο για εύρεση. | Dim IndexNo As Long |
2. Θέση από την οποία ξεκινά η αναζήτηση. | IndexNo = MyList.IndexOf ("Item3", 0) | |
IndexNo = MyList.IndexOf ("Item5", 3) | ||
Λάβετε αριθμό στοιχείων | Κανένας | MsgBox MyList.Count |
Εισαγωγή στοιχείου | 1. Ευρετήριο - θέση για εισαγωγή. | MyList. Εισαγωγή 0, "Στοιχείο 5" |
2 Τιμή - αντικείμενο ή τιμή για εισαγωγή. | MyList. Εισαγωγή 4, "Item7" | |
Διαβάστε το στοιχείο | Ευρετήριο - μακρύς ακέραιος | MsgBox MyList. Στοιχείο (0) |
MsgBox MyList. Στοιχείο (4) | ||
Διαβάστε το στοιχείο που προστέθηκε τελευταία | Ευρετήριο - μακρύς ακέραιος | MsgBox MyList. Στοιχείο (λίστα. Αριθμός - 1) |
Διαβάστε το στοιχείο που προστέθηκε πρώτα | Ευρετήριο - μακρύς ακέραιος | MsgBox MyList. Στοιχείο (0) |
Διαβάστε όλα τα στοιχεία (για καθένα) | N/A | Dim στοιχείο Ως παραλλαγή |
Για κάθε στοιχείο στο MyList | ||
Στοιχείο MsgBox | ||
Επόμενο στοιχείο | ||
Διαβάστε όλα τα στοιχεία (Για) | Ευρετήριο - μακρύς ακέραιος | Dim i As Long |
Για i = 0 To MyList.Count - 1 | ||
MsgBox i | ||
Επόμενο i | ||
Αφαιρέστε όλα τα στοιχεία | Κανένας | MyList.Clear |
Αφαιρέστε το στοιχείο στη θέση του | Θέση ευρετηρίου όπου βρίσκεται το στοιχείο | MyList.RemoveAt 5 |
Κατάργηση στοιχείου κατά όνομα | Το στοιχείο για κατάργηση από τη ArrayList | MyList.Remove "Item3" |
Κατάργηση μιας σειράς στοιχείων | 1. Ευρετήριο - αρχική θέση. | MyList.RemoveRange 4,3 |
2. Καταμέτρηση - ο αριθμός των στοιχείων που πρέπει να αφαιρεθούν. | ||
Ταξινόμηση κατά φθίνουσα σειρά | Κανένας | MyList.Reverse |
Ταξινόμηση κατά αύξουσα σειρά | Μη | MyList.Sort |