VBA - Declarați (Dim), creați și inițializați variabila de matrice

Acest tutorial va demonstra cum să declarați (Dim), să creați și să inițializați variabilele de matrice în VBA

Ce este o variabilă VBA Array?

O variabilă matrice VBA poate fi considerată ca un grup de variabile, stocate sub același nume și având același tip de date. O matrice poate stoca text, numere sau obiecte.

Vă referiți la un element dintr-o matrice folosind numărul său de index.

Puteți declara o variabilă matrice în același mod în care ați declara orice altă variabilă utilizând cuvântul cheie Dim, static, public sau privat.

Matrici statice

Există 2 tipuri de matrice - statice și dinamice. O matrice statică este declarată cu dimensiunea specificată atunci când declarați matricea inițial. Se mai numește și o matrice fixă.

1 Dim intA (4) ca întreg

Matricea de mai sus este declarată folosind instrucțiunea Dim la nivel de procedură sau modul, iar dimensiunea matricei este 5, deoarece nu am declarat valoarea LBound a matricei.

Nu, nu este o greșeală de eroare! Dimensiunea matricei este 5, în ciuda introducerii 4 în matrice. Acest lucru se datorează faptului că indexurile matrice încep automat de la zero.

Indexuri de matrice

Indicii matrice încep automat de la zero, cu excepția cazului în care Opțiunea Baza 1 este declarat în partea de sus a modulului de cod.

Dacă Opțiunea Baza 1 este declarat atunci matricile vor începe automat de la 1.

Cu toate acestea, consider că declararea variabilelor în acest mod este problematică. Este posibil ca examinatorii de cod să nu fie conștienți de faptul că matricile încep de la zero sau de declarația Option Base 1

În schimb, prefer să declar în mod explicit pozițiile de început și de sfârșit ale matricilor:

1 Dim intA (2 până la 5) ca număr întreg

Observați că atunci când faceți acest lucru, puteți porni matricea la orice număr (nu doar 1 sau 0).

Matrice dinamice

O variabilă Dynamic Array este o matrice a cărei dimensiune poate fi modificată în timpul rulării. Declarați variabile dinamice fără dimensiune.

1 Dim intA () ca întreg

Puteți utiliza instrucțiunea ReDim pentru a specifica dimensiunea matricei după ce tabloul a fost creat.

1 ReDim intA (2)

Puteți redimensiona oricând o matrice dinamică. Cu toate acestea, atunci când se utilizează declarația ReDim, toate valorile existente sunt șterse. Pentru a păstra valorile matrice existente, utilizați ReDim Preserve in schimb.

1 ReDim Preserve intA (2)

Puteți declara o matrice dinamică la un nivel Procedură, Modul sau Global, dar puteți utiliza instrucțiunea ReDim doar în cadrul unei Proceduri.

Matrici de variante

Tablourile variabile sunt tablouri dinamice cu care sunt mai ușor de lucrat.

1 Dim varNames ()

Observați că nu este necesar să specificați tipul de date (se presupune că este variantă) sau dimensiunea matricei.

După cum vom vedea mai jos, puteți inițializa matricele variante folosind funcția Matrice (nu este nevoie să redimensionați mai întâi matricile)!

Declarați modulul și matricile publice

După cum se arată mai sus, tablourile pot fi declarate în cadrul procedurilor, pentru a fi utilizate în cadrul procedurii respective:

1234 Sub StaticArray ()'declarați matricea cu o valoare LBound de 1 și o valoare UBound de 4Dim IntA (1 la 4) ca întregSfârșitul Sub

Dar pot fi declarate și la nivel de modul sau global.

1234567 Opțiune explicită'declarați matricea cu o valoare LBound de 1 și o valoare UBound de 4Dim IntA (1 la 4) ca întregSub StaticArray ()Sfârșitul Sub

În acest exemplu, variabila matrice poate fi apelată oriunde în cadrul acestui modul de cod. În schimb, puteți declara o matrice publică care poate fi utilizată în întregul Proiect VBA (a se vedea secțiunea următoare).

Declararea unei matrice publice

Declarați o matrice publică statică așa cum ați declara o variabilă publică.

1 StrNames publice (3) ca Șir

Această declarație ar trebui să meargă în partea de sus a modulului dvs., sub Opțiunea explicită. Ar putea fi apoi utilizat pe tot parcursul proiectului VBA în orice modul sau procedură.

Dacă declarați matricea în partea de sus a modulului, dar cu cuvântul cheie Dim, atunci utilizarea matricei este limitată la modulul respectiv. Încercarea de a utiliza matricea într-un modul separat ar duce la o eroare.

Inițializați matricele

Puteți atribui valori unui tablou static în felul următor.

1234567891011 Sub StaticArray ()'declarați matricea cu o valoare LBound de 1 și o valoare UBound de 4Dim IntA (1 la 4) ca întreg'inițializați matriceaIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'arată rezultatul poziției 2 a matricei în fereastra imediatăDebug.Print IntA (2)Sfârșitul Sub

Dacă executați procedura de mai sus, valoarea 20 va fi afișată în fereastra imediată.

De asemenea, puteți atribui valorile unei matrice dinamice în același mod

12345678910111213 Sub DynamicArray ()'declarați o matrice dinamică, dar omitând valorile legateDim IntA () ca întreg'initializa matriceaReDim IntA (1 până la 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'arată rezultatul poziției 2 a matricei în fereastra imediatăDebug.PrintIntA (2)Sfârșitul Sub

Funcția Array

In orice caz, numai cu varianta matrice, puteți utiliza funcția Array, care poate fi mai ușoară decât utilizarea metodei standard.

12 'populează matriceaintA () = Array (10, 20, 30, 40)

Populați matrice cu buclă

Puteți, de asemenea, să completați matricele prin looping printr-o gamă de celule din Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'declara matriceaDim strNames () Ca șir'declara un număr întreg pentru a număra rândurile dintr-un intervalDim n Ca întreg'declara un număr întreg pentru buclăDim i Integer'numărați rândurile dintr-un intervaln = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'redimensionați matricea la cantitatea de rânduri din interval.ReDim strNames (n)Pentru i = 0 la nstrNames (i) = Range ("A1"). Offset (i + 1, 0)Apoi eu'arată valorile din matriceMsgBox Join (strNames ())Sfârșitul Sub

Reinicializați matricele

Puteți reinițializa matricea în orice etapă a codului dvs., dar veți pierde apoi valoarea originală conținută în acea poziție din matrice.

1234567891011121314 Sub StaticArray ()'declarați matricea cu o valoare LBound de 1 și o valoare UBound de 4Dim IntA (1 la 4) ca întreg'inițializați matriceaIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'arată rezultatul poziției 2 a matricei în fereastra imediatăDebug.Print IntA (2)'inițializați din nou matriceaintA (2) = 200Debug.Print IntA (2)Sfârșitul Sub

În exemplul de mai sus, matricea statică va păstra toate valorile, cu excepția valorii din poziția 2 - acea valoare se va schimba la 200.

Folosind ReDim

Dacă utilizați o matrice dinamică, instrucțiunea ReDim este utilizată pentru a seta dimensiunea matricei. Puteți utiliza declarația ReDim ulterior în codul dvs. pentru a modifica dimensiunea matricei de câte ori aveți nevoie. Linia de cod de mai jos va reinițializa intA Array pentru a avea o dimensiune de 2 (Rețineți - un index Array începe la 0!)

1 ReDim intA (1) ca întreg

Deci, codul care include declarația ReDim ar arăta ca exemplul de mai jos.

1234567891011121314151617 Sub TestDynamicArray ()'declara matriceaDim intA () Ca întregReDim intA (2)'populează matricea cu numereintA (0) = 2intA (1) = 5intA (2) = 9'arată numărul în poziția 1Debug.Print intA (1)'redimensionați matricea pentru a schimba dimensiuneaReDim intA (3)intA (0) = 6intA (1) = 8'arată de data aceasta numărul în poziția 1Debug.Print intA (1)Sfârșitul Sub

Dacă rulați procedura de mai sus, valoarea 5 va fi afișată în fereastra imediată, iar apoi o valoare 8 va fi afișată odată ce am redimensionat matricea folosind ReDim și am repopulat-o. Cu toate acestea, întrucât nu am completat IntA (2) și nu am folosit Re-Dim Preserve, valoarea din acea poziție din matrice va fi eliminată și ambele poziții 3 și 4 din matrice vor fi zero.

Utilizarea ReDim Preserve

Dacă folosim ReDim Preserve, acesta va păstra valorile originale conținute în matrice.

1234567891011121314151617 Sub TestDynamicArray ()'declara matriceaDim intA () Ca întregReDim intA (2)'populează matricea cu numereintA (0) = 2intA (1) = 5intA (2) = 9'arată numărul în poziția 2Debug.Print intA (2)'redimonați matriceaReDim intA (3)intA (0) = 6intA (1) = 8'arată din nou numărul în poziția 2Debug.Print intA (2)Sfârșitul Sub

În ambele casete de mesaje afișate mai sus, numărul 9 va apărea pe măsură ce declarația ReDim Preserve păstrează acea valoare în acea poziție.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave