Αυτό το σεμινάριο θα εξηγήσει το VBA Array, τους διάφορους τύπους συστοιχιών, τις παραλλαγές συστοιχιών και τις μεθόδους συστοιχιών με τη βοήθεια παραδειγμάτων προγραμματισμού:
Μια κανονική μεταβλητή VBA είναι ένας κάτοχος θέσης που αποθηκεύει την τιμή ενός μόνο δεδομένου. Έχει σχέση 1 προς 1, δηλαδή 1 μεταβλητή για 1 τιμή.
Τώρα φανταστείτε να αποθηκεύετε πολλαπλές τιμές που είναι του ίδιου τύπου. Αντί να δημιουργείτε πολλαπλές μεταβλητές, μπορείτε να δημιουργήσετε απλώς μια μεταβλητή και να αποθηκεύσετε όλους τους ίδιους τύπους τιμών. Αυτή η μεταβλητή ονομάζεται ARRAY.
Σε αυτό το σεμινάριο, θα μάθετε τι είναι ένας πίνακας VBA, μονοδιάστατοι και δισδιάστατοι πίνακες μαζί με τους διαφορετικούς τύπους πινάκων όπως Fixed και Dynamic. Θα κατανοήσουμε επίσης διάφορες μεθόδους πινάκων που χρησιμοποιούνται στη VBA.
VBA Array
Οι πίνακες είναι ένα ειδικό είδος μεταβλητής που μπορεί να αποθηκεύσει πολλαπλές τιμές του ίδιου τύπου δεδομένων.
Για παράδειγμα, αν έχετε τα ονόματα 100 υπαλλήλων, τότε αντί να δημιουργήσετε 100 μεταβλητές δεδομένων τύπου string, μπορείτε απλώς να δημιουργήσετε μια μεταβλητή πίνακα τύπου string και να αναθέσετε 100 τιμές στην ίδια μεταβλητή πίνακα.
Μονοδιάστατη συστοιχία
Ένας πίνακας που έχει όλα τα στοιχεία σε μία μόνο γραμμή ή σε μία μόνο στήλη ονομάζεται μονοδιάστατος πίνακας. Η αναγραφή των ονομάτων όλων των μαθητών της τάξης σε μία μόνο στήλη αποτελεί παράδειγμα μονοδιάστατου πίνακα. Δηλώνεται όπως φαίνεται παρακάτω.
Dim arrayname(lowerbound To UpperBound) As DataType
Υπάρχουν πολλαπλοί τρόποι δήλωσης ενός πίνακα. Παρακάτω δίνονται μερικά παραδείγματα.
Παράδειγμα:
#1) Dim MyArrayExample(0 To 3) As Integer
Δημιουργεί έναν πίνακα με θέση 0,1,2,3 που θα δέχεται τιμές Integer.
#2) Dim MyArray2(3) As String
Προεπιλογή από 0 έως 3 και δημιουργεί έναν πίνακα με θέση 0,1,2,3 που θα δέχεται τιμές String.
#3) Dim MyArray2(13 to 15) As Double
Δημιουργεί έναν πίνακα ξεκινώντας από το 13, δηλ. 13, 14 και 15, και δέχεται τιμές Double. Έχουμε αναφέρει ως κατώτερο όριο το 13, οπότε ο πίνακας θα αρχίσει να κατανέμει τιμές από τη θέση 13 και όχι από το 0.
Ας δημιουργήσουμε έναν απλό κώδικα και ας κατανοήσουμε και τους 3 τρόπους δήλωσης του πίνακα.
Σημείωση: Για να γράψετε κώδικα VB Ανοίξτε το Microsoft Excel (οι υποστηριζόμενες εκδόσεις είναι Excel 2007, 2010, 2013, 2016, 2019). Πλοηγηθείτε στο Καρτέλα προγραμματιστή -> Visual Basic (Εναλλακτικά, χρησιμοποιήστε τη συντόμευση Alt+F11). Στον επεξεργαστή VB, κάντε κλικ στην επιλογή Εισαγωγή -> Ενότητα και επικολλήστε τον παρακάτω κώδικα.
Εξετάστε την παρακάτω διαδικασία που δείχνει τους διαφορετικούς τύπους δηλώσεων.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String 'δημιουργεί πίνακα με δείκτη 0,1,2 firstQuarter(0) = "Jan" firstQuarter(1) = "Feb" firstQuarter(2) = "Mar" MsgBox "First Quarter in calendar " & " " & firstQuarter(0) & " " & firstQuarter(1) & " " & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String 'δημιουργεί πίνακα με δείκτη 0,1,2secondQuarter(0) = "Απρίλιος" secondQuarter(1) = "Μάιος" secondQuarter(2) = "Ιούνιος" MsgBox "Δεύτερο τρίμηνο στο ημερολόγιο " & " " & secondQuarter(0) & " " & secondQuarter(1) & " " & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String 'δημιουργεί πίνακα με δείκτες 13,14,15 thirdQuarter(13) = "Ιούλιος" thirdQuarter(14) = "Αύγουστος" thirdQuarter(15) = "Σεπτέμβριος"MsgBox "Τρίτο τρίμηνο στο ημερολόγιο " & " " & thirdQuarter(13) & " " & thirdQuarter(14) & " " & thirdQuarter(15) End Sub
Πατήστε F5 ή πατήστε το κουμπί run στη γραμμή εργαλείων για να εκτελέσετε τον κώδικα.
Κανονική μεταβλητή Vs Μεταβλητή συστοιχίας
Γνωρίζουμε τώρα πώς λειτουργεί ένας μονοδιάστατος πίνακας. Ας αφιερώσουμε λοιπόν λίγο χρόνο για να καταλάβουμε γιατί οι πίνακες είναι τόσο σημαντικοί στις γλώσσες προγραμματισμού.
Ας υποθέσουμε ότι πρέπει να εισαγάγετε τον μισθό 5 εργαζομένων. Για να το πετύχετε αυτό χρησιμοποιώντας μια κανονική μεταβλητή, πρέπει να δημιουργήσετε 5 μεταβλητές.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets("Sheet1") ' Δηλώνουμε μεταβλητή για κάθε μαθητή Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Διαβάζουμε τους βαθμούς των μαθητών από το κελί Emp1 = shet.Range("A" & 2).Value Emp2 = shet.Range("A" & 3).Value Emp3 = shet.Range("A" & 4).Value Emp4 = shet.Range("A" &,5).Value Emp5 = shet.Range("A" & 6).Value ' Εκτυπώστε τους βαθμούς των σπουδαστών Debug.Print "Όνομα Emp" Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Τώρα ας δημιουργήσουμε τον ίδιο κώδικα χρησιμοποιώντας μια μεταβλητή Array.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets("Sheet1") Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range("A" & i).Value Debug.Print Employee(i) Next i End Sub
Εδώ, χρησιμοποιήσαμε μόνο μια μεταβλητή πίνακα που θα αποθηκεύει όλα τα ονόματα των εργαζομένων. Ας υποθέσουμε ότι πρέπει να προσθέσετε άλλα 100 ονόματα εργαζομένων, τότε αρκεί να αλλάξετε το μέγεθος του πίνακα και δεν χρειάζεται να δημιουργήσετε μια νέα μεταβλητή.
Αυτό θα μειώσει τον αριθμό των γραμμών του κώδικα και θα τον κάνει έτσι εύκολα κατανοητό και ευανάγνωστο.
Συστοιχία δύο διαστάσεων
Ένας δισδιάστατος πίνακας έχει 2 δείκτες - ο πρώτος δείκτης θα αντιπροσωπεύει τις γραμμές και ο 2ος δείκτης θα αντιπροσωπεύει τη στήλη. Έχει πολλαπλές γραμμές και στήλες και συνήθως αναπαρίσταται σε μορφή πίνακα.
Η δήλωση ενός πίνακα 2 dim έχει ως εξής:
Dim ArrayName(FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Σκεφτείτε ένα παράδειγμα αποθήκευσης των βαθμών 2 μαθητών που έλαβαν σε 3 μαθήματα. Θα δημιουργήσουμε λοιπόν έναν δισδιάστατο πίνακα που παίρνει 2 γραμμές και 3 στήλες.
Θα ξεκινήσουμε τον πίνακα από τη γραμμή 1 στη γραμμή 2 και από τη στήλη 1 στη στήλη 3.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox "Total Marks in Row 2 and column 2 is " &totalMarks(2,2) Msgbox "Total Marks in Row 1 and column 3 is " &totalMarks(1,3) End Sub
Πατήστε F5 ή πατήστε το κουμπί run στη γραμμή εργαλείων για να εκτελέσετε τον κώδικα.
Σειρά 2 και στήλη 2
Σειρά 1 και στήλη 3
Σταθερές συστοιχίες
Οι Fixed Arrays που ονομάζονται επίσης Static Arrays έχουν ένα σταθερό κατώτερο και ανώτερο όριο και αυτό το μέγεθος δεν μπορεί να αλλάξει κατά τη διάρκεια της εκτέλεσης. Το μέγεθος του πίνακα καθορίζεται κατά τη διάρκεια της δήλωσης μέσα στις παρενθέσεις. Όλα τα παραπάνω παραδείγματα είναι Fixed arrays καθώς έχουμε αναφέρει το μέγεθός τους κατά τη διάρκεια της δήλωσης.
Οι σταθεροί πίνακες χρησιμοποιούνται συνήθως όταν είστε σίγουροι για το μέγεθος του πίνακα. Για παράδειγμα, τον αριθμό των ημερών μιας εβδομάδας, μπορείτε να δημιουργήσετε έναν πίνακα με κατώτερο όριο 0 και ανώτερο όριο 6 και να είστε σίγουροι ότι δεν θα αλλάξετε ποτέ το μέγεθός του.
Δυναμικές συστοιχίες
Οι δυναμικές συστοιχίες μας επιτρέπουν να αλλάζουμε το μέγεθος του πίνακα κατά τη διάρκεια της εκτέλεσης. Αυτές είναι χρήσιμες όταν δεν είστε σίγουροι για το μέγεθος του πίνακα. Ας υποθέσουμε ότι στην εισαγωγή σε κολέγιο, μπορεί να μην είστε σίγουροι για το πόσοι φοιτητές θα γίνουν πραγματικά δεκτοί, οπότε δεν μπορείτε να καθορίσετε το μέγεθος κατά το σχεδιασμό ή τη δήλωση.
Η δήλωση ενός δυναμικού πίνακα είναι παρόμοια με έναν στατικό πίνακα με κενές παρενθέσεις.
Dim Employee() As String
REDIM
Όταν θέλουμε να αλλάξουμε το μέγεθος πρέπει να χρησιμοποιήσουμε REDIM , πρέπει να σημειώσουμε ότι το κάτω όριο δεν μπορεί να αλλάξει, μπορούμε να αλλάξουμε μόνο το άνω όριο του πίνακα.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ' Το Redim θα βοηθήσει στην αλλαγή του μεγέθους του πίνακα κατά τη διάρκεια της εκτέλεσης dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled after " & curdate & " are " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) End Sub
Τώρα, γνωρίζουμε ότι μπορούμε να αλλάξουμε το μέγεθος του πίνακα κατά τη διάρκεια της εκτέλεσης, επομένως μπορούμε να χρησιμοποιούμε την εντολή ReDim όποτε χρειάζεται να αυξήσουμε το ubound ενός πίνακα. Ας προσπαθήσουμε να αυξήσουμε το μέγεθος του πίνακα για άλλη μια φορά και να προσθέσουμε ένα νέο όνομα μαθητή.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled untill " &- curdate &- " are " &- dynArray(0) &- ", " &- dynArray(1) &- ", " &- dynArray(2) ReDim dynArray(3) ' Η Redim θα επανεκκινήσει τον πίνακα και θα καταστρέψει τις παλιές τιμές.dynArray(3) = "John" MsgBox "Students Enrolled untill " & curdate & " are " &- dynArray(0) &- ", " &- dynArray(1) &- ", " &- dynArray(2) &- " , " &- dynArray(3) End Sub
Θα έχετε παρατηρήσει ότι το αποτέλεσμα δεν εμφανίζει τα ονόματα των μαθητών που προστέθηκαν προηγουμένως, δίνει μια μηδενική τιμή. Αυτό συμβαίνει επειδή η εντολή Redim θα δημιουργήσει έναν νέο πίνακα με νέο μέγεθος και θα καταστρέψει τις παλιές τιμές.
ReDim Preserve
Η δήλωση Represerve μας βοηθάει να ξεπεράσουμε τον περιορισμό του ReDim διατηρώντας τις παλιές τιμές και αυξάνοντας έτσι το μέγεθος του πίνακα.
Ας ξαναγράψουμε τον παραπάνω κώδικα χρησιμοποιώντας το ReDim Preserve.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Students Enrolled untill " &- curdate &- " are " &- dynArray(0) &- ", " &- dynArray(1) &- ", " &- dynArray(2) ReDim preserve dynArray(3) ' Redim preserve θα διατηρήσει τις παλιές τιμέςdynArray(3) = "John" MsgBox "Students Enrolled untill " & curdate & " are " &- dynArray(0) &- ", " &- dynArray(1) &- ", " &- dynArray(2) &- " , " &- dynArray(3) End Sub
Καθώς χρησιμοποιήσαμε τη λέξη-κλειδί preserve, οι τιμές που είχαν εισαχθεί προηγουμένως δεν χάνονται και η νέα τιμή προστίθεται με επιτυχία.
Παραλλαγή Array
Μέχρι τώρα έχουμε δει έναν πίνακα που δέχεται τον ίδιο τύπο τιμών. Τώρα ας δηλώσουμε τον πίνακα ως παραλλαγή και ας αποθηκεύσουμε τους διάφορους τύπους δεδομένων όπως String, Date, Long, Integer σε έναν ενιαίο πίνακα.
Παράδειγμα:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = "Vikram Vikrant" arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = "06-09-1972" MsgBox "Details of person " &- arrayData(0) &- " is " &- " Phone No " &- " arrayData(1) &- " ,Id " &- arrayData(2) &- " ,DOB " &- arrayData(3) End Sub
Μέθοδοι VBA Array
Υπάρχουν διάφορες μέθοδοι στους πίνακες της VBA που θα μας βοηθήσουν να εκτελέσουμε διάφορες λειτουργίες, όπως αναφέρεται παρακάτω.
Αριθ. | Όνομα | Σύνταξη | Περιγραφή |
---|---|---|---|
1 | Συστοιχία | Array(arglist) | Μετατρέπει μια κανονική παραλλαγή μεταβλητή σε Array. |
2 | Διαγραφή | Διαγραφή arrayname | Χρησιμοποιείται για την επαναπροσδιορισμό του πίνακα σταθερού μεγέθους και απελευθερώνει τη μνήμη για τον πίνακα Dynamic. |
3 | IsArray | IsArray (όνομα μεταβλητής) | Καθορίζει αν μια μεταβλητή είναι πίνακας. |
4 | Lbound | LBound( ArrayName, [Dimension] ) | Επιστρέφει τον χαμηλότερο δείκτη ενός πίνακα. |
5 | Ubound | UBound( ArrayName, [Dimension] ) | Επιστρέφει τον υψηλότερο δείκτη ενός πίνακα. |
6 | Split | Split(expression, [ delimiter, [ limit, [ compare ]]]]) | Διαιρεί μια συμβολοσειρά σε πολλαπλές υποσυμβολοσειρές και επιστρέφει έναν πίνακα με βάση το μηδέν. |
7 | Εγγραφείτε στο | Join(sourcearray, [ delimiter ]) | Ενώνει πολλαπλές υποομάδες σε έναν πίνακα και επιστρέφει μια τιμή συμβολοσειράς. |
8 | Φίλτρο | Filter(sourcearray, match, [ include, [ compare ]]) | Φίλτρο θα μας επιτρέψει να αναζητήσουμε ένα καθορισμένη αντιστοιχία από έναν πίνακα. |
Ας συζητήσουμε κάθε ένα από αυτά λεπτομερώς με ένα παράδειγμα.
#1) Συστοιχία
Ας δηλώσουμε μια κανονική μεταβλητή παραλλαγής και ας τη χρησιμοποιήσουμε ως πίνακα. Όταν θέλουμε να αλλάξουμε μια κανονική μεταβλητή παραλλαγής σε πίνακα, πρέπει να χρησιμοποιήσουμε μια ARRAY όπως φαίνεται στο παρακάτω παράδειγμα.
Οι συναρτήσεις πίνακα δέχονται ένα όρισμα που περιέχει τιμές διαχωρισμένες με κόμμα. Αυτές οι τιμές εκχωρούνται ως στοιχείο του πίνακα.
Sub variantArray() Dim varData As Variant varData = Array("Mon Bel", "+61 112334123", 567, "06-09-1972") MsgBox "Details of person " &- varData(0) &- " is " &- " Phone No " &- varData(1) &- " ,Id " &- varData(2) &- " ,DOB " &- varData(3) End Sub
Πρέπει να προσδιορίσετε μια μεταβλητή πίνακα χρησιμοποιώντας έναν δείκτη, επομένως στο παραπάνω παράδειγμα, οι τιμές ανακτώνται ως varData(0) varData(2) varData(3).
#2) Διαγραφή
Αυτή η συνάρτηση θα διαγράψει όλες τις τιμές που έχουν εισαχθεί για έναν πίνακα σταθερού μεγέθους και θα ελευθερώσει το χώρο μνήμης για έναν δυναμικό πίνακα.
Σύνταξη: Erase arrayname
Η διαγραφή έχει διαφορετική συμπεριφορά για διαφορετικούς τύπους δεδομένων, όπως δίνεται παρακάτω.
- Για ένα σταθερό αριθμητικό: Όλες οι τιμές μηδενίζονται.
- Για έναν σταθερό τύπο δεδομένων συμβολοσειράς: Όλες οι τιμές μηδενίζονται σε μηδενικό μήκος.
- Για μια δυναμική συστοιχία: Απελευθερώνει τη μνήμη που χρησιμοποιείται από τον πίνακα.
Παράδειγμα:
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = "Erase Function" Dim DynaArray() ReDim DynaArray(3) MsgBox " Values before Erase " & (NumArray(0)) &- "," &- (decArray(1)) &- " , " &- (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' Allδιαγράφονται οι τιμές. MsgBox " Values after Erase " & NumArray(0) & "," & decArray(1) & " , " & strArray(1) End Sub
Αποτέλεσμα πριν από τη χρήση της λειτουργίας διαγραφής
Αποτέλεσμα μετά τη χρήση Erase
#3) IsArray
Αυτή η συνάρτηση χρησιμοποιείται για να καθορίσει αν η δεδομένη μεταβλητή εισόδου είναι πίνακας ή όχι. Επιστρέφει true αν η μεταβλητή που εισάγεται είναι true, διαφορετικά επιστρέφει false.
Σύνταξη : IsArray (όνομα μεταβλητής)
Παράδειγμα:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array("Jan", "Feb", "Mar") arr2 = "12345" MsgBox ("Is arr1 an Array : " &? IsArray(arr1)) MsgBox ("Is arr2 an Array : " & IsArray(arr2)) End
Το αποτέλεσμα από το πρώτο Msgbox
Το αποτέλεσμα από το δεύτερο msgbox
#4) Lbound
Επιστρέφει τον χαμηλότερο δείκτη του πίνακα που ορίζεται ως όρισμα για τη συνάρτηση Lbound.
Σύνταξη: LBound( ArrayName, [Dimension] )
ArrayName είναι το όνομα του πίνακα.
Dimension είναι η προαιρετική ακέραια τιμή, εάν ο πίνακας έχει πολλαπλές διαστάσεις, τότε μπορείτε να καθορίσετε σε ποια διάσταση θέλετε να προσδιορίσετε το Lbound.
Παράδειγμα:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Δηλώνουμε τις μεταβλητές του πίνακα. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Επιστρέφει 1. Result2 = LBound(ArrayValue, 3) ' Επιστρέφει 10. Result3 = LBound(Arraywithoutlbound) MsgBox "Χαμηλότερη υποδιαστολή στον πρώτο πίνακα " & Result1 & " χαμηλότερη υποδιαστολή στον 3ο πίνακα " & Result2 & " Χαμηλότερηsubscript in Arraywithoutlbound " & Result3 End Sub
#5) Ubound
Επιστρέφει τον ανώτερο δείκτη του πίνακα που ορίζεται ως όρισμα στη συνάρτηση Ubound.
Σύνταξη: UBound( ArrayName, [Dimension] )
ArrayName είναι το όνομα του πίνακα.
Dimension είναι η προαιρετική ακέραια τιμή, εάν ο πίνακας έχει πολλαπλές διαστάσεις, τότε μπορείτε να καθορίσετε σε ποια διάσταση θέλετε να προσδιορίσετε το Ubound.
Παράδειγμα:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Δηλώστε μεταβλητές πίνακα. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox "Χαμηλότερος δείκτης στον πρώτο πίνακα " & Result1 & " χαμηλότερος δείκτης στον 3ο πίνακα " & Result2 & " χαμηλότερος δείκτης στον 3ο πίνακα " & Result2 & " χαμηλότερος δείκτης στονArraywithoutlbound " & Result3 End Sub
#6) Σπλιτ
Επιστρέφει έναν πίνακα με έναν αριθμό υποσύνολων που προέρχονται από το δεδομένο ολόκληρο αλφαριθμητικό.
Σύνταξη: Split(expression, [ delimiter, [ limit, [ compare ]]])
- Έκφραση: Αυτή είναι ολόκληρη η συμβολοσειρά που θα χρησιμοποιηθεί για την παραγωγή υποσυμβολοσειρών.
- Διαχωριστικό: Χρησιμοποιώντας το καθορισμένο διαχωριστικό, θα δημιουργηθούν υποσύνολα. Εάν αυτό δεν αναφέρεται, τότε το κενό θεωρείται ως διαχωριστικό.
- Όριο: Αριθμός των υποσυνόλων που θα επιστραφούν.
- Συγκρίνετε: Αφού παραχθεί η υποσειρά, μπορείτε να χρησιμοποιήσετε διάφορες επιλογές σύγκρισης για να ελέγξετε το αποτέλεσμα.
Παράδειγμα: Στο παρακάτω παράδειγμα, χρησιμοποιούμε το διαχωριστικό ως - και το όριο ως 3.
Ως εκ τούτου, η συνάρτηση split θα διαχωρίσει ολόκληρη τη συμβολοσειρά σε υποσυμβολοσειρές με βάση τον οριοθέτη. Αλλά έχουμε επίσης αναφέρει το όριο ως 3, οπότε οι υποσυμβολοσειρές δεν θα σχηματιστούν μετά το όριο 3. Έτσι, ο τελευταίος οριοθέτης - θα παραλειφθεί.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = "This is the example for-VBA-Split-Function" Result = Split(MyString, "-",3) MsgBox Result(0) &- vbNewLine &- Result(1) &- vbNewLine &- Result(2) &- vbNewLine &- Result(3) End Sub
#7) Εγγραφή
Αυτό είναι ακριβώς το αντίστροφο του split, το Join θα δημιουργήσει μια συμβολοσειρά συνδυάζοντας διάφορες υποσυμβολοσειρές.
Σύνταξη: Join(sourcearray, [ delimiter ])
Sourcearray: Μονοδιάστατος πίνακας συμβολοσειρών που θέλετε να ενώσετε σε μία.
Διαχωριστικό: Ο καθορισμένος διαχωριστής θα προστεθεί μετά από κάθε συμβολοσειρά κατά την ένωση.
Παράδειγμα:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = "D:" dirarray(1) = "SoftwareTestingHelp" dirarray(2) = "Arrays" Result = Join(dirarray, "\") MsgBox "Ημερομηνία μετά την ένωση " & Result End Sub
Και οι 3 τιμές ενώνονται και το \ τοποθετείται ανάμεσα σε κάθε λέξη, όπως αναφέραμε το \ ως διαχωριστικό.
#8) Φίλτρο
Το φίλτρο θα μας επιτρέψει να αναζητήσουμε μια συγκεκριμένη αντιστοιχία από έναν πίνακα. Με βάση τα κριτήρια του φίλτρου, θα επιστραφεί το υποσύνολο ενός πίνακα συμβολοσειρών.
Σύνταξη: Filter(sourcearray, match, [ include, [ compare ]]])
Παράδειγμα:
Sub filterExample() Dim Mystring As Variant Mystring = Array("Software Testing", "Testing help", "Software help") filterString = Filter(Mystring, "help") MsgBox "Found " & UBound(Mystring) - LBound(Mystring) + 1 & " words matching the criteria " End Sub
Αυτό το παράδειγμα θα αναζητήσει τη λέξη "help" σε όλες τις συμβολοσειρές του πίνακα χρησιμοποιώντας τη συνάρτηση filter.
Συχνές ερωτήσεις
Q #1) Πώς να λάβετε το μήκος ενός πίνακα στην VBA;
Απαντήστε: Για να λάβουμε το μήκος ενός πίνακα, χρησιμοποιούμε τη συνάρτηση Ubound. Αυτή η συνάρτηση θα μας δώσει τον ανώτερο δείκτη ενός καθορισμένου πίνακα.
Q #2) Πώς να δηλώσετε έναν πίνακα στην VBA;
Απάντηση: Ο μονοδιάστατος πίνακας δηλώνεται όπως φαίνεται παρακάτω.
Dim arrayname(lowerbound To UpperBound) As DataType
Παράδειγμα: Dim Myarray(0 To 2) As Integer
Ένας δισδιάστατος πίνακας δηλώνεται όπως φαίνεται παρακάτω.
Dim ArrayName(FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Παράδειγμα: Dim marks(1 έως 3, 0 έως 2) As Integer
Q #3) Πώς να μετατρέψετε Range σε Array;
Απαντήστε: Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση Transpose για να μετατρέψουμε το εύρος σε πίνακα. Αυτός ο κώδικας θα δημιουργήσει το Mys[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
Q #4) Τι είναι η παραλλαγή ενός πίνακα στη VBA;
Απαντήστε: Ένας πίνακας παραλλαγών θα δέχεται όλα τα είδη τύπων δεδομένων για τον δείκτη του, δηλαδή μπορείτε να αποθηκεύσετε διαφορετικούς τύπους τιμών σε έναν ενιαίο πίνακα.
Παράδειγμα:
Dim arrayData(3) As Variant
arrayData(0) = "Vikas Vipal"
arrayData(1) = 411234567890#
Συζητήθηκαν με παραδείγματα οι τρόποι αλλαγής του μεγέθους του πίνακα κατά τη διάρκεια της εκτέλεσης, καθώς και η διατήρηση των τιμών με τη χρήση της redim preserve. Τέλος, μάθαμε τις μεθόδους Array που θα μας βοηθήσουν στην εκτέλεση διαφόρων λειτουργιών.