VBA ReDim | Manipulați matrice dinamice utilizând VBA ReDim Preserve

Declarație Excel VBA ReDim

Declarația VBA Redim este similară cu declarația dim, dar diferența este că este utilizată pentru a stoca sau aloca mai mult spațiu de stocare sau pentru a micșora spațiul de stocare pe care o variabilă sau o matrice îl are, acum există două aspecte importante utilizate cu instrucțiunea este Conservare, dacă conservarea este utilizată cu această declarație, atunci se creează o nouă matrice cu dimensiuni diferite și dacă conservarea nu este utilizată cu această instrucțiune, atunci doar modifică dimensiunea matricei variabilei curente.

Tablourile sunt o parte importantă a codificării VBA. Folosind matrici putem stoca mai multe valori în aceeași variabilă pe care am definit-o. Ca și cum declarăm variabila folosind cuvântul „Dim” în mod similar, trebuie să declarăm numele matricei folosind și „Dim”.

Pentru a declara numele matricei, trebuie mai întâi să identificăm tipul matricei pe care urmează să o definim. În tablouri, avem 5 tipuri.

  1. Static Array
  2. Matrice dinamică
  3. Matrice unidimensională
  4. Matrice bidimensională
  5. Matrice multidimensională

În matricea statică în excel, vom decide valoarea inferioară și cea superioară a matricei cu mult timp înainte, în timp ce declarăm variabila. De exemplu, uitați-vă la exemplul de mai jos.

Cod:

 Sub ReDim_Example1 () Dim MyArray (1 până la 5) Ca sfârșit de șir Sub 

Aici MyArray este numele matricei care poate conține valoarea de la 1 la 5. MyArray poate conține 5 rezultate diferite în ea, precum cea de mai jos.

Cod:

 Sub ReDim_Example1 () Dim MyArray (1 To 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Dimineața" MyArray (4) = "Have a" MyArray (5) = Sub-sfârșitul „Ziua plăcută” 

Matrice dinamică cu declarație ReDim

Dar în matricea dinamică nu este cazul, nu vom decide valoarea inferioară și valoarea superioară cu mult înainte, ci doar să definim numele matricei și să atribuim tipul de date.

 Sub ReDim_Example1 () Dim MyArray () As String End Sub 

Pentru a face denumirea matricei dinamică, trebuie să o declarăm mai întâi cu cuvântul „Dim”, dar nu decidem dimensiunea matricei cu mult timp în avans. Numim doar o matrice cu valori goale în paranteză (). Când matricea nu include dimensiunea, atunci este tratată ca o matrice dinamică.

Dim MyArray () Ca șir

În momentul în care menționați dimensiunea tabloului din paranteză, acesta devine un tablou static. Dim MyArray (1 până la 5) ca șir

În tabloul dinamic, redimensionăm întotdeauna dimensiunea tabloului folosind cuvântul „ReDim” în următoarea linie a codului.

ReDim MyArray (1 până la 6) ca șir

Orice valoare stocată în numele matricei în pașii anteriori, adică folosind declarația „Dim”, este nulă, iar dimensiunea pe care am declarat-o folosind „ReDim” devine noua dimensiune a matricei.

Exemple de utilizare a declarației VBA Redim

Puteți descărca acest șablon Excel VBA ReDim aici - Șablon VBA ReDim Excel

Exemplul nr. 1

Aruncați o privire la exemplul de utilizare a declarației „ReDim” practic. Urmați pașii de mai jos pentru a aplica „ReDim”.

Pasul 1: Creați mai întâi un nume de macro.

Pasul 2: Declarați un nume de matrice ca un șir.

Cod:

 Sub ReDim_Example1 () Dim MyArray () As String End Sub 

Pasul 3: Acum utilizați cuvântul „Redim” și atribuiți dimensiunea matricei.

Cod:

 Sub ReDim_Example1 () Dim MyArray () Ca șir ReDim MyArray (1 la 3) End Sub 

Pasul 4: Deci, acum numele matricei „MyArray” poate conține până la 3 valori aici. Atribuiți valoarea acestor 3 tablouri precum cea de mai jos.

Cod:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" End Sub 

Deci, prima matrice este egală cu cuvântul „Bun venit”, a doua matrice este egală cu cuvântul „către”, iar a treia matrice este egală cu cuvântul „VBA”.

Pasul 5: Acum stocați aceste valori ale matricei în celule.

Cod:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" Range ("A1"). Value = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Pasul 6: Dacă rulați acest cod, ar trebui să avem aceste valori în celulele A1, B1 și respectiv C1.

Exemplul # 2 - Redimensionați dimensiunea matricei în timp ce vă amintiți valorile vechi.

Odată ce numele matricei a atribuit valori, putem redimensiona și în orice moment al procedurii, folosind cuvântul „ReDim Preserve”.

Să presupunem că ați declarat deja un nume de matrice și că ați atribuit valori acelor nume de matrice, precum cel de mai jos.

Acum doriți să măriți lungimea matricei cu 2, adică 5. În acest caz, putem folosi cuvântul VBA „ReDim Preserve” pentru a redimensiona lungimea matricei pentru a ne aminti și de valorile vechi.

Cod:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = Gama „Caracter 1” („A1”). Valoare = Aria mea (1) Gama („B1"). Valoare = Aria mea (2) Gama („C1"). Valoare = Aria mea (3) Gama („D1"). Valoare = MyArray (4) End Sub 

Acum putem atribui încă două valori matricei.

Cod:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = Gama „Caracter 1” („A1”). Valoare = Aria mea (1) Gama („B1"). Valoare = Aria mea (2) Gama („C1"). Valoare = Aria mea (3) Gama („D1"). Valoare = MyArray (4) End Sub 

Acum stocați aceste valori în celule.

Cod:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = Gama „Caracter 1” („A1”). Valoare = Aria mea (1) Gama („B1"). Valoare = Aria mea (2) Gama („C1"). Valoare = Aria mea (3) Gama („D1"). Valoare = MyArray (4) End Sub 

Acum rulați macro-ul și vedeți ce se întâmplă

Așa că am primit noul cuvânt în celula D1.

Motivul pentru care trebuie să folosim cuvântul „conservare”, deoarece matricea ar trebui să rețină valorile matricei vechi din procedură.

În momentul în care ignorați cuvântul „păstrați”, acesta nu își va aminti valorile vechi.

Lucruri de reținut aici

  • ReDim can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.