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 folosite 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”, trebuie să declarăm și 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 timp în avans; mai degrabă, definim doar numele matricei și atribuim tipul de date.

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

Pentru a face numele matricei dinamic, trebuie să îl declarăm mai întâi cu cuvântul „Dim”, dar nu decideți dimensiunea matricei cu mult timp înainte. 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 instrucțiunea „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

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 până 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 i se atribuie valori, putem redimensiona și în orice moment al procedurii folosind cuvântul „ReDim Preserve”.

Assume you have already declared an array name and assigned values to those array name like the below one.

Now you would like to increase the array length by 2, i.e., 5. In this case, we can use the word VBA “ReDim Preserve” to resize the array length to remember the old values as well.

Code:

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) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now we can assign two more values to the array.

Code:

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) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now store these values in cells.

Code:

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) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now run the macro and see what happens.

So we got the new word in the D1 cell.

Motivul pentru care trebuie să folosim cuvântul „conservare”, deoarece tabloul ar trebui să rețină valorile vechi ale matricii 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 poate deține doar ultima valoare a matricei, nu multele valori. De exemplu, nu putem folosi acest cod „ReDim Preserve MyArray (4-5)”. Aceasta va arunca eroarea.
  • Nu putem ReDim matrici statice. În momentul în care atribuiți dimensiunea tabloului din paranteză, acesta devine un tablou static.
  • Folosind ReDim, nu putem schimba tipul de date. Tabloul poate conține indiferent de tipul de date pe care l-am atribuit în timpul declarării tabloului.

Articole interesante...