Πίνακες στη Visual Basic για εφαρμογή

Οι πίνακες στη Visual Basic for Application είναι δομές που συνήθως αποθηκεύουν σύνολα σχετικών μεταβλητών του ίδιου τύπου. Οι εγγραφές πίνακα είναι προσβάσιμες από τον αριθμητικό τους ευρετήριο.

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

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Αλλά μπορείτε να χρησιμοποιήσετε έναν πολύ πιο απλό και πιο οργανωμένο τρόπο – αποθηκεύστε μια λίστα με ονόματα μελών της ομάδας σε μια σειρά από 20 μεταβλητές όπως Σπάγγος:

Dim Team_Members(1 έως 20) Ως συμβολοσειρά

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

Team_Members(1) = "John Smith"

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

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

Για i = 1 έως 20 κελιά(i,1).Τιμή = Team_Members(i) Επόμενο i

Προφανώς, η εργασία με έναν πίνακα που αποθηκεύει 20 ονόματα είναι πολύ λιγότερο επαχθής και πιο ακριβής από τη χρήση 20 ξεχωριστών μεταβλητών. Τι γίνεται όμως αν αυτά τα ονόματα δεν είναι 20, αλλά 1000; Και αν, επιπλέον, απαιτείται να τηρούνται τα επώνυμα και τα πατρώνυμα χωριστά;! Είναι σαφές ότι σύντομα θα καταστεί εντελώς αδύνατο να χειριστεί κανείς έναν τέτοιο όγκο δεδομένων σε κώδικα VBA χωρίς τη βοήθεια ενός πίνακα.

Πολυδιάστατοι πίνακες στο Excel Visual Basic

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

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

Dim Jan_Sales_Figures(1 έως 31, 1 έως 5) ως νόμισμα

Για πρόσβαση σε στοιχεία πίνακα Jan_Sales_Figures, πρέπει να χρησιμοποιήσετε δύο ευρετήρια που υποδεικνύουν την ημέρα του μήνα και τον αριθμό εντολής. Για παράδειγμα, η διεύθυνση ενός στοιχείου που περιέχει στοιχεία πωλήσεων για 2-ω ομάδες για 15 ου Ο Ιανουάριος θα γραφόταν ως εξής:

Jan_Sales_Figures(15, 2)

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

Δήλωση πινάκων στο Excel Visual Basic

Νωρίτερα σε αυτό το άρθρο, εξετάσαμε ήδη αρκετά παραδείγματα δήλωσης πινάκων στο VBA, αλλά αυτό το θέμα αξίζει μια πιο προσεκτική ματιά. Όπως φαίνεται, ένας μονοδιάστατος πίνακας μπορεί να δηλωθεί ως εξής:

Dim Team_Members(1 έως 20) Ως συμβολοσειρά

Μια τέτοια δήλωση λέει στον μεταγλωττιστή VBA ότι ο πίνακας Μέλη ομάδας αποτελείται από 20 μεταβλητές που μπορούν να προσπελαστούν σε δείκτες από το 1 έως το 20. Ωστόσο, θα μπορούσαμε να σκεφτούμε να αριθμήσουμε τις μεταβλητές του πίνακα από το 0 έως το 19, οπότε ο πίνακας θα πρέπει να δηλωθεί ως εξής:

Dim Team_Members(0 έως 19) Ως συμβολοσειρά

Στην πραγματικότητα, από προεπιλογή, η αρίθμηση των στοιχείων του πίνακα ξεκινά από το 0 και στη δήλωση του πίνακα, ο αρχικός δείκτης μπορεί να μην καθορίζεται καθόλου, ως εξής:

Dim Team_Members(19) As String

Ο μεταγλωττιστής VBA θα χειριστεί μια τέτοια καταχώρηση ως δήλωση ενός πίνακα 20 στοιχείων με δείκτες από 0 έως 19.

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

Dim Jan_Sales_Figures(1 έως 31, 1 έως 5) ως νόμισμα

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

Dim Jan_Sales_Figures(31, 5) Ως νόμισμα

τότε αυτή η καταχώρηση θα αντιμετωπίζεται ως ένας δισδιάστατος πίνακας, η πρώτη διάσταση του οποίου περιέχει 32 στοιχεία με δείκτες από το 0 έως το 31 και η δεύτερη διάσταση του πίνακα περιέχει 6 στοιχεία με δείκτες από το 0 έως το 5.

Δυναμικές συστοιχίες

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

Ένας δυναμικός πίνακας δηλώνεται με κενές παρενθέσεις, ως εξής:

Dim Team_Members() Ως συμβολοσειρά

Στη συνέχεια, θα χρειαστεί να δηλώσετε τη διάσταση του πίνακα κατά την εκτέλεση του κώδικα χρησιμοποιώντας την έκφραση ReDim:

ReDim Team_Members (1 έως 20)

Και αν κατά την εκτέλεση του κώδικα πρέπει να αλλάξετε ξανά το μέγεθος του πίνακα, τότε μπορείτε να χρησιμοποιήσετε ξανά την έκφραση ReDim:

Αν Team_Size > 20 Τότε ReDim Team_Members(1 To Team_Size) Τέλος Εάν

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

Αν Team_Size > 20 Τότε ReDim Preserve Team_Members(1 To Team_Size) Τέλος Εάν

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

Αφήστε μια απάντηση