excel vba array array methods with examples
Acest tutorial va explica matricea VBA, diferite tipuri de matrice, matrice variantă și metode de matrice cu ajutorul exemplelor de programare:
O variabilă VBA obișnuită este un deținător de locuri care stochează valoarea unei singure date. Are o relație de la 1 la 1, adică 1 variabilă pentru 1 valoare.
Acum imaginați-vă stocarea mai multor valori care sunt de același tip. În loc să creați mai multe variabile, puteți crea o singură variabilă și să stocați aceleași tipuri de valori. Această variabilă se numește ARRAY.
=> Vizitați aici pentru a vedea seria de antrenament VBA pentru toți
diferența dintre testul unitar și testul de integrare
În acest tutorial, veți afla ce este o matrice VBA, matrici unidimensionale și bidimensionale, împreună cu diferitele tipuri de matrici, cum ar fi Fix și Dinamic. De asemenea, vom înțelege diferite metode de matrice care sunt utilizate în VBA.
Ce veți învăța:
VBA Array
Tablourile sunt un tip special de variabilă care poate stoca mai multe valori de același tip de date.
De exemplu, dacă aveți numele a 100 de angajați, atunci în loc să creați 100 de variabile ale șirului de tip date, puteți crea o singură variabilă matrice de tip șir și să atribuiți 100 de valori aceleiași variabile matrice.
Matrice unidimensională
O matrice care are toate elementele într-un singur rând sau într-o singură coloană se numește matrice unidimensională. Listarea numelor tuturor elevilor din clasă într-o singură coloană este un exemplu de matrice unidimensională. Este declarat așa cum se arată mai jos.
Dim arrayname (lowerbound To UpperBound) ca DataType
Există mai multe moduri de a declara o matrice. Mai jos sunt câteva exemple.
Exemplu:
# 1) Dim MyArrayExample (0-3) ca întreg
Creează o matrice cu locația 0,1,2,3 care va accepta valori întregi.
# 2) Dim MyArray2 (3) Ca șir
Valori implicite de la 0 la 3 și creează o matrice cu locația 0,1,2,3 care va accepta valorile șirului.
# 3) Dim MyArray2 (13-15) Ca dublu
Creează o matrice începând de la 13, adică 13, 14 și 15 și acceptă valori duble. Am menționat limita inferioară ca 13, deci matricea va începe să aloce valori din locația 13, mai degrabă decât 0.
Să creăm un cod simplu și să înțelegem toate cele 3 moduri de declarare a matricei.
Notă: Pentru a scrie codul VB Deschideți Microsoft Excel (versiunile acceptate sunt Excel 2007, 2010, 2013, 2016, 2019). Navigheaza catre Fila Dezvoltator -> Visual Basic (Utilizați alternativ comanda rapidă Alt + F11). În editorul VB, faceți clic pe Inserați -> Modul și lipiți codul de mai jos.
Luați în considerare procedura de mai jos care prezintă diferitele tipuri de declarații.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 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 ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
Apăsați F5 sau apăsați butonul Executare de pe bara de instrumente pentru a executa codul.
Variabilă regulată Vs Variabilă de matrice
Acum știm cum funcționează o matrice unidimensională. Deci, să luăm un moment pentru a înțelege de ce matricile sunt atât de importante în limbajele de programare.
Să presupunem că trebuie să introduceți salariul a 5 angajați. Pentru a realiza acest lucru folosind o variabilă obișnuită, trebuie să creați 5 variabile.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell 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 ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Acum să construim același cod folosind o variabilă 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
Aici, tocmai am folosit o variabilă matrice care va stoca toate numele angajaților. Să presupunem că trebuie să adăugați încă 100 de nume de angajați, atunci trebuie doar să modificați dimensiunea matricei și să nu trebuie să creați o nouă variabilă.
Acest lucru va reduce numărul de linii din cod și astfel îl va face ușor de înțeles și de citit.
Matricea bidimensională
Un tablou bidimensional are 2 indici - primul index va reprezenta rândurile, iar al doilea index va reprezenta coloana. Are mai multe rânduri și coloane și este de obicei reprezentat într-un format de tabel.
Declarația unei matrice de 2 dim este următoarea:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) ca tip de date.
Luați în considerare un exemplu de stocare a notelor a 2 elevi obținute la 3 discipline. Deci, vom crea o matrice bidimensională care ia 2 rânduri și 3 coloane.
Vom începe matricea de la rândul 1 la rândul 2 și coloana 1 până la coloana 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
Apăsați F5 sau apăsați butonul Executare de pe bara de instrumente pentru a executa codul.
Rândul 2 și coloana 2
Rândul 1 și coloana 3
Aranjamente corecte
Matricele fixe, numite și matrici statice, au o limită inferioară fixă și o limită superioară, iar această dimensiune nu poate fi modificată în timpul rulării. Dimensiunea matricei este specificată în timpul declarației dintre paranteze. Toate exemplele de mai sus sunt tablouri fixe, deoarece am menționat dimensiunea acestuia în timpul declarației.
Tablourile fixe sunt de obicei utilizate atunci când sunteți sigur de dimensiunea matricei. De exemplu, numărul de zile dintr-o săptămână, puteți crea o matrice cu limita inferioară 0 și limita superioară 6 și asigurați-vă că nu veți schimba niciodată dimensiunea acesteia.
Matrice dinamice
Tablourile dinamice ne permit să redimensionăm matricea în timpul rulării. Acestea sunt utile atunci când nu sunteți sigur cu privire la dimensiunea matricei. Să presupunem că, la admiterea la facultate, este posibil să nu fiți sigur de câți studenți vor primi efectiv admiterea, deci nu puteți determina dimensiunea la momentul proiectării sau declarației.
Declarația unui tablou dinamic este similară cu un tablou static cu paranteze goale.
Dim Angajat () Ca Șir
REDIM
Când vrem să schimbăm dimensiunea, trebuie să o folosim REDIM , trebuie să observăm că limita inferioară nu poate fi modificată, putem schimba doar limita superioară a matricei.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
Acum, știm că putem schimba dimensiunea matricei în timpul rulării, prin urmare putem folosi instrucțiunea ReDim ori de câte ori avem nevoie pentru a crește ubound-ul unei matrice. Să încercăm să mărim încă o dată dimensiunea matricei și să adăugăm un nou nume de student.
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 will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Ați fi observat că rezultatul nu a arătat numele studenților adăugați înainte, dă o valoare nulă. Asta deoarece declarația Redim va crea o nouă matrice cu o nouă dimensiune și va distruge valorile vechi.
ReDim Preserve
Declarația Represerve ne ajută să depășim limitarea ReDim prin păstrarea valorilor vechi și, prin urmare, mărirea dimensiunii matricei.
Să rescriem codul de mai sus folosind 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 will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Deoarece am folosit cuvântul cheie de conservare, valorile introduse anterior nu se pierd și noua valoare este adăugată cu succes.
Variant Array
Până acum am văzut o matrice care acceptă același tip de valori. Acum, să declarăm matricea ca variantă și să stocăm diferitele tipuri de date, cum ar fi Șir, dată, lung, întreg într-o singură matrice.
Exemplu:
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
Metode VBA Array
Există mai multe metode în matricile VBA care ne vor ajuta să îndeplinim diferite funcții, așa cum se menționează mai jos.
Sl. Nu | Nume | Sintaxă | Descriere |
---|---|---|---|
7 | A te alatura | Alăturați-vă (sursă, (delimitator)) | Alătură mai multe șiruri de caractere într-o matrice și returnează o valoare șir. |
unu | Matrice | Matrice (frauduloasă) | Convertește o variantă obișnuită variabilă într-o matrice. |
Două | Şterge | Ștergeți numele de rețea | Folosit pentru reintializarea matricei de dimensiuni fixe și eliberează memoria pentru matricea dinamică. |
3 | IsArray | IsArray (nume variabil) | Determină dacă o variabilă este o matrice. |
4 | Legat | LBound (ArrayName, (Dimensiune)) | Returnează cel mai mic indice dintr-o matrice. |
5 | Uound | UBound (ArrayName, (Dimensiune)) | Returnează cel mai mare indice dintr-o matrice. |
6 | Despică | Split (expresie, (delimitator, (limită, (compara)))) | Împarte un șir în mai multe șiruri de caractere și returnează o matrice bazată pe zero. |
8 | Filtru | Filtru (sursă, potrivire, (include, (compara))) | Filtrul ne va permite să căutăm un potrivire specificată dintr-o matrice. |
Să discutăm fiecare dintre ele în detaliu cu un exemplu.
# 1) Matrice
Să declarăm o variantă obișnuită variabilă și să o folosim ca matrice. Când doriți să schimbați o variabilă variantă obișnuită într-o matrice, trebuie să folosim un ARMAT funcționează așa cum se arată în exemplul de mai jos.
Funcțiile matrice acceptă un argument care conține valori separate prin virgulă. Aceste valori sunt atribuite ca element al matricei.
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
Trebuie să identificați o variabilă matrice folosind un index, prin urmare, în exemplul de mai sus, valorile sunt preluate ca varData (0) varData (2) varData (3).
# 2) Ștergeți
Această funcție va șterge toate valorile introduse pentru o matrice de dimensiuni fixe și va elibera spațiul de memorie pentru o matrice dinamică.
Sintaxă: Șterge numele de arrain
Ștergerea are un comportament diferit pentru diferite tipuri de date, după cum se arată mai jos.
- Pentru un numeric fix: Toate valorile sunt resetate la zero.
- Pentru un tip de date cu șir fix: Toate valorile sunt resetate la zero.
- Pentru o matrice dinamică: Eliberează memoria utilizată de matrice.
Exemplu:
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 values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
Rezultați înainte de a utiliza funcția de ștergere
Rezultatul după utilizarea Erase
# 3) IsArray
Această funcție este utilizată pentru a determina dacă variabila de intrare dată este sau nu o matrice. Revine true dacă variabila introdusă este adevărată, altfel returnează false.
Sintaxă: IsArray (variablename)
Exemplu:
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
Rezultatul din primul Msgbox
Rezultatul din a doua msgbox
# 4) Lbound
Returnează cel mai mic indice al matricei specificat ca argument pentru funcția Lbound.
Sintaxă: LBound (ArrayName, (Dimension))
ArrayName este numele matricei.
Dimensiunea este valoarea întregului opțional, dacă matricea are mai multe dimensiuni, atunci puteți specifica la ce dimensiune doriți să determinați Lbound-ul.
Exemplu:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 5) Ubound
Întoarce indicele superior al matricei specificat ca argument în funcția Ubound.
Sintaxă: UBound (ArrayName, (Dimension))
ArrayName este numele matricei.
Dimensiunea este valoarea întregului opțional, dacă matricea are mai multe dimensiuni, atunci puteți specifica ce dimensiune doriți să determinați Ubound.
Exemplu:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 6) Split
Returnează o matrice cu un număr de șiruri derivate din întregul șir dat.
Sintaxă: Split (expresie, (delimitator, (limită, (compara))))
- Expresie: Acesta este întregul șir care va fi folosit pentru a produce șiruri de caractere.
- Delimitator: Folosind delimitatorul specificat, vor fi generate șiruri. Dacă acest lucru nu este menționat, atunci spațiul este considerat ca delimitator.
- Limită: Numărul de șiruri de caractere care trebuie returnate.
- Comparaţie: După producerea șirului, puteți utiliza diferite opțiuni de comparare pentru a testa rezultatul.
Exemplu: În exemplul de mai jos, folosim delimitatorul ca - și limita ca 3.
Prin urmare, funcția de divizare va separa întregul șir în sub șir pe baza delimitatorului. Dar am menționat, de asemenea, limita ca 3, astfel încât șirurile nu se vor forma după limita 3. Astfel, ultimul delimitator - va fi omis.
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) Alăturați-vă
Acesta este doar inversul divizării, Join va crea un șir prin combinarea mai multor șiruri de caractere.
Sintaxă: Alăturare (sursă, (delimitator))
Sourcearray: Matrice unidimensională de șiruri pe care doriți să le alăturați într-una.
Delimitator: Delimitatorul specificat va fi adăugat după fiecare șir în timpul alăturării.
Exemplu:
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 'Date after joining ' & Result End Sub
Toate cele 3 valori sunt unite și este plasat între fiecare cuvânt, așa cum am menționat ca delimitator.
# 8) Filtru
Filtrul ne va permite să căutăm o potrivire specificată dintr-o matrice. Pe baza criteriilor de filtrare, va fi returnat subsetul unei matrice de șiruri.
Sintaxă: filtru (sursă, potrivire, (include, (compara)))
Exemplu:
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
Acest exemplu va căuta cuvântul „ajutor” în toate șirurile de matrice utilizând funcția de filtrare.
întrebări frecvente
Q # 1) Cum se obține lungimea unui tablou în VBA?
Răspuns: Pentru a obține lungimea unui tablou, folosim funcția Ubound. Această funcție ne va oferi un indice superior al unui tablou specificat.
Q # 2) Cum se declară o matrice în VBA?
Răspuns: Matricea unidimensională este declarată așa cum se arată mai jos.
Dim arrayname (lowerbound To UpperBound) ca DataType
Exemplu: Dim Myarray (0 la 2) ca întreg
O matrice bidimensională este declarată așa cum se arată mai jos.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) ca tip de date.
Exemplu: Marcaje de dim (1 până la 3, 0 până la 2) ca întreg
Î # 3) Cum se convertește gama în matrice?
Răspuns: Putem folosi funcția Transpose pentru a converti gama într-o matrice. Acest cod va crea Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q # 4) Ce este o variantă de matrice în VBA?
Răspuns: O matrice variantă va accepta toate tipurile de tipuri de date pentru indexul său, adică puteți stoca diferite tipuri de valori într-o singură matrice.
Exemplu:
Dim arrayData (3) Ca variantă
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Q # 5) Ce este o declarație de bază a opțiunii?
Răspuns: Aceasta este utilizată pentru a declara subscriptul inferior al unui tablou și este utilizat la începutul unui modul. În mod implicit, indicele inferior este 0 dacă declarați Opțiunea Baza 1 la nivelul modulului, atunci pentru toate matricile implicite indicele inferior este 1.
cum să remediați gateway-ul implicit nu este disponibil
Concluzie
În acest tutorial, am învățat cum sunt utilizate matricele în VBA și am văzut cum matricile sunt diferite de o variabilă obișnuită. Am explorat tablouri unidimensionale și bidimensionale cu exemple. De asemenea, am discutat tablouri fixe și dinamice.
Modurile de redimensionare a matricei în timpul rulării și, de asemenea, de conservare a valorilor folosind redim conservation au fost discutate cu exemple. În cele din urmă, am învățat metodele Array care ne vor ajuta în efectuarea mai multor operațiuni.
=> Consultați TOATE tutorialele VBA aici
Lectură recomandată
- Tutorial Excel VBA - Introducere în VBA în Excel
- Tipuri de date VBA - Tipuri de date numerice și nenumerice în VBA
- Variabile VBA și opțiune explicite în VBA
- Inversați o matrice în Java - 3 metode cu exemple
- Tutorial Java Lungime matrice cu exemple de cod
- Matrice Jagged în Java - Tutorial cu exemple
- Tipuri de date matrice - matrice int, matrice dublă, matrice de șiruri etc.
- String Array C ++: Implementare și reprezentare cu exemple