VBA Arrays

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

VBA Array Quick Sheet

Πίνακες

ΠεριγραφήΚωδικός VBAΔημιουργώDim arr (1 έως 3) Ως παραλλαγή
arr (1) = "ένα"
arr (2) = "δύο"
arr (3) = "τρία"Δημιουργία από το ExcelDim arr (1 έως 3) Ως παραλλαγή
Dim cell As Range, i As Integer
i = LBound (βέλος)
Για κάθε κελί εντός εμβέλειας ("A1: A3")
i = i + 1
arr (i) = cell.value
Επόμενο κελίΔιαβάστε όλα τα στοιχείαDim i as Long
Για i = LBound (arr) To UBound (arr)
MsgBox arr (i)
Επόμενο iΕξάλειψηΔιαγραφή βέλουςArray to StringDim sName As String
sName = Συμμετοχή (arr, “:”)Αύξηση μεγέθουςΒέλος ReDim Preserve (0 έως 100)Ορισμός τιμήςarr (1) = 22

Γρήγορα παραδείγματα συστοιχίας VBA

Ας δούμε ένα πλήρες παράδειγμα πριν αναφερθούμε σε συγκεκριμένα:

12345678910 Sub ArrayExample ()Dim strNames (1 έως 4) ως συμβολοσειράstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"msgbox strNames (3)Τέλος υπο

Εδώ έχουμε δημιουργήσει τον πίνακα μονοδιάστατων συμβολοσειρών: strNames με μέγεθος τέσσερα (μπορεί να κρατήσει τέσσερις τιμές) και έχουμε εκχωρήσει τις τέσσερις τιμές. Τελευταία εμφανίζουμε την 3η τιμή σε ένα πλαίσιο μηνυμάτων.

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

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

12345678 Sub ArrayExample2 ()Dim strNames (1 έως 60000) As StringDim i As LongΓια i = 1 έως 60000strNames (i) = Κελιά (i, 1). ΑξίαΕπόμενο iΤέλος υπο

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

Οφέλη συστοιχίας; - Ταχύτητα!

Σως σκεφτείτε πίνακες παρόμοιους με τα φύλλα εργασίας του Excel:

  • Κάθε κελί (ή στοιχείο σε έναν πίνακα) μπορεί να περιέχει τη δική του τιμή
  • Μπορείτε να έχετε πρόσβαση σε κάθε κελί (ή στοιχείο σε έναν πίνακα) από τη θέση της γραμμής και της στήλης.
    • Φύλλο εργασίας Πρ. κελιά (1,4). αξία = "Σειρά 1, στήλη 4"
    • Array Ex. arrVar (1,4) = "Σειρά 1, Στήλη 4"

Γιατί λοιπόν να ασχοληθείς με τις Arrays; Γιατί να μην διαβάζετε και να γράφετε τιμές απευθείας σε κελιά στο Excel; Μια λέξη: Ταχύτητα!

Η ανάγνωση / εγγραφή σε κελιά Excel είναι μια αργή διαδικασία. Η συνεργασία με τις συστοιχίες είναι πολύ πιο γρήγορη!

Δημιουργία / Δήλωση πίνακα (Dim)

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

Στατικός πίνακας

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

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

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

Μπορείτε να δηλώσετε ρητά τις θέσεις έναρξης και λήξης ενός πίνακα:

123456789101112 Sub StaticArray1 ()«Δημιουργεί πίνακα με θέσεις 1,2,3,4Dim arrDemo1 (1 έως 4) ως συμβολοσειρά«Δημιουργεί πίνακα με θέσεις 4,5,6,7Dim arrDemo2 (4 έως 7) Όσο καιρό«Δημιουργεί πίνακα με θέσεις 0,1,2,3Dim arrDemo3 (0 έως 3) Όσο καιρόΤέλος υπο

Or μπορείτε να εισαγάγετε μόνο το μέγεθος του πίνακα:

123456 Sub StaticArray2 ()«Δημιουργεί πίνακα με θέσεις 0,1,2,3Dim arrDemo1 (3) As StringΤέλος υπο

Σπουδαίος! Παρατηρήστε ότι από προεπιλογή, οι πίνακες ξεκινούν από τη θέση 0. Έτσι Dim arrDemo1 (3) δημιουργεί έναν πίνακα με θέσεις 0,1,2,3.

Μπορείτε να δηλώσετε Βάση επιλογής 1 στο επάνω μέρος της μονάδας σας, έτσι ώστε ο πίνακας να ξεκινά στη θέση 1:

12345678 Βάση επιλογής 1Sub StaticArray3 ()'Δημιουργεί πίνακα με θέσεις 1,2,3Dim arrDemo1 (3) Ως συμβολοσειράΤέλος υπο

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

Κουραστήκατε να ψάχνετε για παραδείγματα κώδικα VBA; Δοκιμάστε το AutoMacro!

Δυναμική συστοιχία

Δυναμικές συστοιχίες είναι πίνακες των οποίων το μέγεθος μπορεί να αλλάξει (ή των οποίων το μέγεθος δεν χρειάζεται να οριστεί).

Υπάρχουν δύο τρόποι δήλωσης δυναμικού πίνακα.

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

Ο πρώτος τρόπος δήλωσης ενός δυναμικού πίνακα είναι ο ορισμός του πίνακα σε τύπο Παραλαγή.

1 Dim arrVar () Ως παραλλαγή

Με Παραλλαγή Array, δεν χρειάζεται να ορίσετε το μέγεθος του πίνακα. Το μέγεθος θα προσαρμοστεί αυτόματα. Απλώς θυμηθείτε ότι ο πίνακας ξεκινά με τη θέση 0 (εκτός εάν προσθέσετε τη Βάση επιλογών 1 στο επάνω μέρος της μονάδας σας)

12345678910111213 Sub VariantArray ()Dim arrVar () Ως παραλλαγή«Ορισμός τιμών (μέγεθος = 0,1,2,3)arrVar = Πίνακας (1, 2, 3, 4)«Αλλαγή τιμών (Μέγεθος = 0,1,2,3,4)arrVar = Array ("1a", "2a", "3a", "4a", "5a")'Θέση εξόδου 4 ("5α")MsgBox arrVar (4)Τέλος υπο

Μη παραλλακτικές δυναμικές συστοιχίες

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

1234567 Sub DynamicArray1 ()Dim arrDemo1 () Ως συμβολοσειρά«Αλλαγή μεγέθους πίνακα με θέσεις 1,2,3,4ReDim arrDemo1 (1 έως 4)Τέλος υπο

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

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

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

12 «Αλλαγή μεγέθους πίνακα με θέσεις 1,2,3,4ReDim arrDemo1 (1 έως 4)

Το ReDim αλλάζει το μέγεθος του πίνακα. Διαβάστε παρακάτω για τη διαφορά μεταξύ ReDim και ReDim Preserve.

ReDim εναντίον ReDim Preserve

Όταν χρησιμοποιείτε το ReDim εντολή διαγράφετε όλες τις υπάρχουσες τιμές από τον πίνακα. Αντ 'αυτού μπορείτε να χρησιμοποιήσετε ReDim Preserve για τη διατήρηση των τιμών του πίνακα:

12 «Αλλαγές μεγέθους πίνακα με θέσεις 1,2,3,4 (Διατήρηση των υφιστάμενων τιμών)ReDim Preserve arrDemo1 (1 έως 4)

Η δήλωση συστοιχιών απλοποιημένη

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

Ορισμός τιμών πίνακα

Ο καθορισμός τιμών πίνακα είναι πολύ εύκολος.

Με έναν στατικό πίνακα, πρέπει να ορίσετε κάθε θέση του πίνακα, μία κάθε φορά:

12345678 Sub ArrayExample ()Dim strNames (1 έως 4) ως συμβολοσειράstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Τέλος υπο

Με ένα Variant Array μπορείτε να ορίσετε ολόκληρο τον πίνακα με μία γραμμή (μόνο πρακτικό για μικρούς πίνακες):

123456 Sub ArrayExample_1Line ()Dim strNames () Ως παραλλαγήstrNames = Array ("Shelly", "Steve", "Neema", "Jose")Τέλος υπο

Εάν επιχειρήσετε να ορίσετε μια τιμή για μια θέση πίνακα που δεν υπάρχει, θα λάβετε ένα σφάλμα Subscript Out Range:

1 strNames (5) = "Shannon"

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

Λάβετε αξία πίνακα

Μπορείτε να ανακτήσετε τιμές πίνακα με τον ίδιο τρόπο. Στο παρακάτω παράδειγμα θα γράψουμε τιμές πίνακα σε κελιά:

1234 Εύρος ("A1"). Τιμή = strNames (1)Εύρος ("A2"). Τιμή = strNames (2)Εύρος ("A3"). Τιμή = strNames (3)Εύρος ("A4"). Τιμή = strNames (4)

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Εκχώρηση εύρους σε πίνακα

Για να αντιστοιχίσετε ένα εύρος σε έναν πίνακα, μπορείτε να χρησιμοποιήσετε ένα βρόχο:

12345678 Sub RangeToArray ()Dim strNames (1 έως 60000) ως συμβολοσειράDim i As LongΓια i = 1 έως 60000strNames (i) = Κελιά (i, 1). ΑξίαΕπόμενο iΤέλος υπο

Αυτό θα κάνει βρόχο στα κελιά A1: A60000, εκχωρώντας τις τιμές κελιού στον πίνακα.

Πίνακας εξόδου στο εύρος

Or μπορείτε να χρησιμοποιήσετε έναν βρόχο για να αντιστοιχίσετε έναν πίνακα σε μια περιοχή:

123 Για i = 1 έως 60000Κελιά (i, 1). Αξία = strNames (i)Επόμενο i

Αυτό θα κάνει το αντίστροφο: αντιστοιχίστε τιμές πίνακα στα κελιά A1: A60000

2D / Πολυδιάστατες συστοιχίες

Μέχρι στιγμής έχουμε εργαστεί αποκλειστικά με μονοδιάστατους πίνακες (1D). Ωστόσο, οι πίνακες μπορούν να έχουν έως 32 διαστάσεις.

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

Παραδείγματα πολυδιάστατων συστοιχιών

Τώρα ας δείξουμε παραδείγματα εργασίας με συστοιχίες διαφορετικών διαστάσεων.

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Παράδειγμα 1D πίνακα

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

1234567891011121314 Sub ArrayEx_1d ()Dim strNames (1 έως 60000) ως συμβολοσειράDim i As Long'Εκχώρηση αξιών σε πίνακαΓια i = 1 έως 60000strNames (i) = Cells (i, 1). ValueΕπόμενο iΤιμές πίνακα εξόδων σε εύροςΓια i = 1 έως 60000Φύλλα ("Έξοδος"). Κελιά (i, 1). Αξία = strNames (i)Επόμενο iΤέλος υπο

Παράδειγμα 2D Array

Αυτή η διαδικασία περιέχει ένα παράδειγμα 2D πίνακα:

123456789101112131415161718 Sub ArrayEx_2d ()Dim strNames (1 έως 60000, 1 έως 10) ως συμβολοσειράDim i As Long, j As Long'Εκχώρηση αξιών σε πίνακαΓια i = 1 έως 60000Για j = 1 έως 10strNames (i, j) = Cells (i, j). ValueΕπόμενο jΕπόμενο iΤιμές πίνακα εξόδων σε εύροςΓια i = 1 έως 60000Για j = 1 έως 10Φύλλα ("Έξοδος"). Κελιά (i, j). Αξία = strNames (i, j)Επόμενο jΕπόμενο iΤέλος υπο

Παράδειγμα τρισδιάστατου πίνακα

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

12345678910111213141516171819202122 Sub ArrayEx_3d ()Dim strNames (1 έως 60000, 1 έως 10, 1 έως 3) ως συμβολοσειράDim i As Long, j As Long, k Όσο καιρό'Εκχώρηση αξιών σε πίνακαΓια k = 1 έως 3Για i = 1 έως 60000Για j = 1 έως 10strNames (i, j, k) = Sheets ("Sheet" & k). Cells (i, j). ValueΕπόμενο jΕπόμενο iΕπόμενο κΤιμές πίνακα εξόδων σε εύροςΓια k = 1 έως 3Για i = 1 έως 60000Για j = 1 έως 10Φύλλα ("Έξοδος" & k). Κελιά (i, j). Αξία = strNames (i, j, k)Επόμενο jΕπόμενο iΕπόμενο κΤέλος υπο

Μήκος / Μέγεθος πίνακα

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

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Συνάρτηση UBound και LBound

Το πρώτο βήμα για τη λήψη του μήκους / μεγέθους ενός πίνακα είναι η χρήση των συναρτήσεων UBound και LBound για να αποκτήσετε τα άνω και κάτω όρια του πίνακα:

123456 Sub UBoundLBound ()Dim strNames (1 έως 4) As StringMsgBox UBound (ονόματα str)MsgBox LBound (ονόματα str)Τέλος υπο

Η αφαίρεση των δύο (και η προσθήκη 1) θα σας δώσει το μήκος:

1 GetArrLength = UBound (strNames) - LBound (strNames) + 1

Συνάρτηση μήκους πίνακα

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

1234567 Δημόσια λειτουργία GetArrLength (a As Variant) Όσο καιρόΑν IsEmpty (α) ΤότεGetArrLength = 0ΑλλούGetArrLength = UBound (a) - LBound (a) + 1Τέλος εανΛειτουργία Τέλους

Πρέπει να υπολογίσετε το μέγεθος μιας συστοιχίας 2D; Δείτε το σεμινάριό μας: Υπολογίστε το μέγεθος του πίνακα.

Loop Through Array

Υπάρχουν δύο τρόποι για να κάνετε loop μέσω ενός πίνακα. Οι πρώτοι βρόχοι μέσα από τους ακέραιους αριθμούς που αντιστοιχούν στις αριθμητικές θέσεις του πίνακα. Εάν γνωρίζετε το μέγεθος του πίνακα, μπορείτε να το καθορίσετε απευθείας:

12345678910111213 Sub ArrayExample_Loop1 ()Dim strNames (1 έως 4) As StringDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Για i = 1 έως 4MsgBox strNames (i)Επόμενο iΤέλος υπο

Ωστόσο, εάν δεν γνωρίζετε το μέγεθος του πίνακα (εάν ο πίνακας είναι δυναμικός), μπορείτε να χρησιμοποιήσετε τις συναρτήσεις LBound και UBound από την προηγούμενη ενότητα:

12345678910111213 Sub ArrayExample_Loop2 ()Dim strNames (1 έως 4) As StringDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Για i = LBound (strNames) To UBound (strNames)MsgBox strNames (i)Επόμενο iΤέλος υπο

Για κάθε βρόχο πίνακα

Η δεύτερη μέθοδος είναι με ένα για κάθε βρόχο. Αυτό περνάει σε κάθε στοιχείο του πίνακα:

12345678910111213 Sub ArrayExample_Loop3 ()Dim strNames (1 έως 4) As StringDim ItemstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Για κάθε στοιχείο σε ονόματα strNamesΣτοιχείο MsgBoxΕπόμενο ΣτοιχείοΤέλος υπο

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

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Loop Through 2D Array

Μπορείτε επίσης να χρησιμοποιήσετε τις συναρτήσεις UBound και LBound για να περιηγηθείτε επίσης σε έναν πολυδιάστατο πίνακα. Σε αυτό το παράδειγμα θα κάνουμε βρόχο σε έναν πίνακα 2D. Παρατηρήστε ότι οι λειτουργίες UBound και LBound σάς επιτρέπουν να καθορίσετε ποια διάσταση του πίνακα θα βρείτε τα άνω και κάτω όρια (1 για την πρώτη διάσταση, 2 για τη δεύτερη διάσταση).

1234567891011121314151617181920 Sub ArrayExample_Loop4 ()Dim strNames (1 έως 4, 1 έως 2) ως συμβολοσειράDim i As Long, j As LongstrNames (1, 1) = "Shelly"strNames (2, 1) = "Steve"strNames (3, 1) = "Neema"strNames (4, 1) = "Jose"strNames (1, 2) = "Shelby"strNames (2, 2) = "Steven"strNames (3, 2) = "Nemo"strNames (4, 2) = "Jesse"Για j = LBound (strNames, 2) To UBound (strNames, 2)Για i = LBound (strNames, 1) To UBound (strNames, 1)MsgBox strNames (i, j)Επόμενο iΕπόμενο jΤέλος υπο

Άλλες εργασίες πίνακα

Εκκαθάριση πίνακα

Για να διαγράψετε ολόκληρο τον πίνακα, χρησιμοποιήστε τη δήλωση διαγραφής:

1 Διαγραφή ονομάτων strNames

Παράδειγμα χρήσης:

12345678910 Sub ArrayExample ()Dim strNames (1 έως 4) ως συμβολοσειράstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Διαγραφή ονομάτων strNamesΤέλος υπο

Εναλλακτικά, μπορείτε επίσης να επανατοποθετήσετε τον πίνακα για να αλλάξετε το μέγεθος, καθαρίζοντας μέρος του πίνακα:

1 ReDim strNames (1 έως 2)

Αυτό αλλάζει το μέγεθος του πίνακα στο μέγεθος 2, διαγράφοντας τις θέσεις 3 και 4.

Count Array

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

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

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

123456789101112131415 Sub ArrayLoopandCount ()Dim strNames (1 έως 4) As StringDim i As Long, n As LongstrNames (1) = "Shelly"strNames (2) = "Steve"Για i = LBound (strNames) To UBound (strNames)Εάν strNames (i) "" Τότεn = n + 1Τέλος εανΕπόμενο iMsgBox n & "βρέθηκαν μη κενές τιμές."Τέλος υπο

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Κατάργηση διπλότυπων

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

Φίλτρο

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

1234567891011121314 Sub Filter_Match ()'Ορισμός πίνακαDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Φίλτρο (strNames, "Smith")'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names".Τέλος υπο

Λειτουργία IsArray

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

123456789101112 Sub IsArrayEx ()'Δημιουργεί πίνακα με θέσεις 1,2,3Dim arrDemo1 (3) Ως συμβολοσειρά'Δημιουργεί κανονική μεταβλητή συμβολοσειράςDim str As StringMsgBox IsArray (arrDemo1)MsgBox IsArray (str)Τέλος υπο

Εγγραφείτε στο Array

Μπορείτε γρήγορα να "ενώσετε" έναν ολόκληρο πίνακα μαζί με τη συνάρτηση Join:

123456789101112 Sub Array_Join ()Dim strNames (1 έως 4) As StringΑπενεργοποιήστε τα ονόματα ως συμβολοσειράstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"joinNames = Συμμετοχή (strNames, ",")MsgBox joinNamesΤέλος υπο

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Διαχωρισμός συμβολοσειράς σε πίνακα

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

123456789 Sub Array_Split ()Dim Names () As StringDim joinNames As StringjoinNames = "Shelly, Steve, Nema, Jose"Names = Split (joinNames, ",")MsgBox Names (1)Τέλος υπο

Εδώ χωρίζουμε αυτήν τη σειρά κειμένου "Shelly, Steve, Nema, Jose" σε έναν πίνακα (μέγεθος 4) χρησιμοποιώντας τον οριοθέτη κόμμα (, ").

Const Array

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

123456789 «Ορίστε το ConstantArrayΣυνάρτηση ConstantArray ()ConstantArray = Array (4, 12, 21, 100, 5)Λειτουργία Τέλους«Ανακτήστε την αξία ConstantArraySub RetrieveValues ​​()MsgBox ConstantArray (3)Τέλος υπο

Αντιγραφή πίνακα

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

12345678910111213141516171819 Sub CopyArray ()Dim Arr1 (1 έως 100) Όσο καιρόDim Arr2 (1 έως 100) Όσο καιρόDim i As Long«Δημιουργία πίνακα1Για i = 1 έως 100Arr1 (i) = iΕπόμενο i'CopyArray1 στο Array2Για i = 1 έως 100Arr2 (i) = Arr1 (i)Επόμενο iMsgBox Arr2 (74)Τέλος υπο

Μεταθέτω

Δεν υπάρχει ενσωματωμένη λειτουργία VBA που να σας επιτρέπει να μεταφέρετε έναν πίνακα. Ωστόσο, έχουμε γράψει μια συνάρτηση για τη μεταφορά ενός 2D πίνακα. Διαβάστε το άρθρο για να μάθετε περισσότερα.

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Πίνακας επιστροφής συνάρτησης

Μια κοινή ερώτηση που έχουν οι προγραμματιστές VBA είναι πώς να δημιουργήσουν μια συνάρτηση που επιστρέφει έναν πίνακα. Νομίζω ότι οι περισσότερες από τις δυσκολίες επιλύονται με τη χρήση Variant Arrays. Έχουμε γράψει ένα άρθρο με θέμα: VBA Function Return Array.

Χρήση συστοιχιών στο Access VBA

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

1234567891011121314151617181920212223 Sub RangeToArrayAccess ()Στο Σφάλμα Συνέχιση ΕπόμενοDim strNames () Ως συμβολοσειράDim i As LongDim iCount As LongDim dbs As DatabaseDim rst As RecordsetΟρίστε dbs = CurrentDbΡύθμιση rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Με πρώτη.MoveLast.MoveFirstiCount = .RecordCountReDim strNames (1 σε iCount)Για i = 1 σε iCountstrNames (i) = rst.Fields ("Όνομα πελάτη").MoveNextΕπόμενο iΤέλος μεπρώτα. ΚλείσιμοΡύθμιση rst = ΤίποταΟρισμός dbs = ΤίποταΤέλος υπο
Μαθήματα Array
Array Mega-GuideΝαί
Λήψη μεγέθους πίνακα
Εκκαθάριση πίνακα
Πίνακας φίλτρων
Μεταφορά πίνακα
Πίνακας επιστροφής συνάρτησης
Κατάργηση διπλότυπων

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

wave wave wave wave wave