Matrice în Visual Basic for Application

Matricele din Visual Basic for Application sunt structuri care stochează de obicei seturi de variabile asociate de același tip. Intrările din matrice sunt accesate prin indexul lor numeric.

De exemplu, există o echipă de 20 de persoane ale căror nume trebuie să fie salvate pentru a fi utilizate ulterior în codul VBA. S-ar putea declara pur și simplu 20 de variabile care să dețină fiecare nume, așa:

Dim Team_Member1 ca șir Dim Team_Member2 ca șir ... Dim Team_Member20 ca șir

Dar puteți folosi un mod mult mai simplu și mai organizat - stocați o listă de nume de membri ai echipei într-o serie de 20 de variabile, cum ar fi Şir:

Dim Team_Members(1 To 20) As String

În linia prezentată mai sus, am declarat o matrice. Acum să scriem o valoare pentru fiecare dintre elementele sale, astfel:

Team_Members(1) = „John Smith”

Un avantaj suplimentar al stocării datelor într-o matrice, în comparație cu utilizarea variabilelor separate, devine evident atunci când devine necesar să se efectueze aceeași acțiune pe fiecare element al matricei. Dacă numele membrilor echipei ar fi stocate în 20 de variabile separate, atunci ar fi nevoie de 20 de linii de cod pentru a scrie de fiecare dată pentru a efectua aceeași acțiune pe fiecare dintre ele. Cu toate acestea, dacă numele sunt stocate într-o matrice, atunci puteți efectua acțiunea dorită cu fiecare dintre ele folosind o buclă simplă.

Cum funcționează este demonstrat mai jos cu un exemplu de cod care tipărește secvențial numele fiecărui membru al echipei în celulele coloanei. A foaie de lucru Excel activă.

Pentru i = 1 până la 20 de celule(i,1).Valoare = Team_Members(i) Următorul i

Evident, lucrul cu o matrice care stochează 20 de nume este mult mai puțin greoi și mai precis decât folosirea a 20 de variabile separate. Dar dacă aceste nume nu sunt 20, ci 1000? Și dacă, în plus, se impune păstrarea separată a numelor de familie și a patronimicelor?! Este clar că în curând va deveni complet imposibil să gestionezi un astfel de volum de date în codul VBA fără ajutorul unei matrice.

Matrice multidimensionale în Excel Visual Basic

Matricele Visual Basic discutate mai sus sunt considerate unidimensionale. Aceasta înseamnă că stochează o listă simplă de nume. Cu toate acestea, tablourile pot avea mai multe dimensiuni. De exemplu, o matrice bidimensională poate fi comparată cu o grilă de valori.

Să presupunem că doriți să salvați cifrele zilnice de vânzări pentru ianuarie pentru 5 echipe diferite. Acest lucru va necesita o matrice bidimensională constând din 5 seturi de valori timp de 31 de zile. Să declarăm o matrice ca aceasta:

Dim Jan_Sales_Figures(1 la 31, 1 la 5) ca monedă

Pentru a accesa elementele matricei Jan_Sales_Figures, trebuie să utilizați doi indici care indică ziua lunii și numărul comenzii. De exemplu, adresa unui element care conține cifre de vânzări pentru 2-oh echipe pentru Al 15-lea Ianuarie ar fi scris astfel:

Cifre_vânzări_ian(15, 2)

În același mod, puteți declara o matrice cu 3 sau mai multe dimensiuni - doar adăugați dimensiuni suplimentare la declarația matricei și utilizați indici suplimentari pentru a face referire la elementele acestei matrice.

Declararea tablourilor în Excel Visual Basic

Mai devreme în acest articol, am analizat deja câteva exemple de declarare a matricelor în VBA, dar acest subiect merită o privire mai atentă. După cum se arată, o matrice unidimensională poate fi declarată astfel:

Dim Team_Members(1 To 20) As String

O astfel de declarație îi spune compilatorului VBA că matricea Membrii echipei constă din 20 de variabile care pot fi accesate la indici de la 1 la 20. Cu toate acestea, ne-am putea gândi să numerotăm variabilele noastre matrice de la 0 la 19, caz în care matricea ar trebui declarată astfel:

Dim Team_Members(0 To 19) As String

De fapt, în mod implicit, numerotarea elementelor matricei începe de la 0, iar în declarația matricei este posibil să nu fie specificat deloc indexul inițial, astfel:

Dim Team_Members(19) As String

Compilatorul VBA va trata o astfel de intrare ca declarând o matrice de 20 de elemente cu indici de la 0 la 19.

Aceleași reguli se aplică atunci când se declară tablouri Visual Basic multidimensionale. După cum se arată deja într-unul dintre exemple, atunci când se declară o matrice bidimensională, indicii dimensiunilor sale sunt separați prin virgulă:

Dim Jan_Sales_Figures(1 la 31, 1 la 5) ca monedă

Cu toate acestea, dacă nu specificați un index de pornire pentru ambele dimensiuni ale matricei și îl declarați astfel:

Dim Jan_Sales_Figures(31, 5) As Currency

atunci această intrare va fi tratată ca o matrice bidimensională, a cărei primă dimensiune conține 32 de elemente cu indici de la 0 la 31, iar a doua dimensiune a matricei conține 6 elemente cu indici de la 0 la 5.

Tablouri dinamice

Toate tablourile din exemplele de mai sus au un număr fix de dimensiuni. Cu toate acestea, în multe cazuri nu știm dinainte ce dimensiune ar trebui să aibă matricea noastră. Putem ieși din situație declarând o matrice uriașă, a cărei dimensiune va fi cu siguranță mai mare decât este necesar pentru sarcina noastră. Dar o astfel de soluție va necesita multă memorie suplimentară și poate încetini programul. Există o soluție mai bună. Putem folosi o matrice dinamică - aceasta este o matrice a cărei dimensiune poate fi setată și modificată de orice număr în timpul execuției unei macrocomenzi.

O matrice dinamică este declarată cu paranteze goale, astfel:

Dim Team_Members() As String

În continuare, va trebui să declarați dimensiunea matricei în timpul execuției codului folosind expresia ReDim:

ReDim Team_Members(1 - 20)

Și dacă în timpul execuției codului trebuie să schimbați din nou dimensiunea matricei, atunci puteți utiliza din nou expresia ReDim:

Dacă Team_Size > 20, atunci ReDim Team_Members(1 To Team_Size) End If

Rețineți că redimensionarea unei matrice dinamice în acest fel va duce la pierderea tuturor valorilor stocate în matrice. Pentru a stoca date deja în matrice, trebuie să utilizați cuvântul cheie păstradupă cum se arată mai jos:

Dacă Team_Size > 20, atunci ReDim Preserve Team_Members(1 To Team_Size) End If

Din păcate cuvântul cheie păstra poate fi folosit doar pentru a modifica limita superioară a unei dimensiuni a matricei. Limita inferioară a unui tablou nu poate fi modificată în acest fel. De asemenea, dacă matricea are mai multe dimensiuni, atunci folosind cuvântul cheie păstra, numai ultima dimensiune a matricei poate fi redimensionată.

Lasă un comentariu