VBA ReDim - Obsługuj tablice dynamiczne za pomocą VBA ReDim Preserve

Instrukcja Excel VBA ReDim

Instrukcja VBA Redim jest podobna do instrukcji dim, ale różnica polega na tym, że jest używana do przechowywania lub przydzielania większej ilości miejsca lub zmniejszania miejsca, w którym znajduje się zmienna lub tablica, teraz są dwa ważne aspekty używane z instrukcją Preserve, jeśli preserve jest używane z tą instrukcją, to tworzy nową tablicę o innym rozmiarze, a jeśli preserve nie jest używana z tą instrukcją, to po prostu zmienia rozmiar tablicy bieżącej zmiennej.

Tablice są ważną częścią kodowania VBA. Używając tablic, możemy przechowywać więcej niż jedną wartość w tej samej zmiennej, którą zdefiniowaliśmy. Podobnie jak w przypadku deklarowania zmiennej za pomocą słowa „Dim”, musimy również zadeklarować nazwę tablicy za pomocą „Dim”.

Aby zadeklarować nazwę tablicy, musimy najpierw zidentyfikować rodzaj tablicy, którą zamierzamy zdefiniować. W tablicach mamy 5 typów.

  1. Tablica statyczna
  2. Dynamiczna tablica
  3. Jednowymiarowa tablica
  4. Dwuwymiarowa tablica
  5. Tablica wielowymiarowa

W tablicy statycznej w programie Excel określimy dolną i górną wartość tablicy z dużym wyprzedzeniem podczas deklarowania zmiennej. Na przykład spójrz na poniższy przykład.

Kod:

Sub ReDim_Example1 () Dim MyArray (1 do 5) As String End Sub

Tutaj MyArray jest nazwą tablicy, która może zawierać wartości od 1 do 5. MyArray może przechowywać 5 różnych wyników, takich jak poniższy.

Kod:

Sub ReDim_Example1 () Dim MyArray (1 do 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = „Miły dzień” Koniec Sub

Tablica dynamiczna z instrukcją ReDim

Ale w tablicy dynamicznej tak nie jest. Nie będziemy decydować o dolnej i górnej wartości z dużym wyprzedzeniem; raczej definiujemy nazwę tablicy i przypisujemy typ danych.

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

Aby nazwa tablicy była dynamiczna, musimy najpierw zadeklarować ją ze słowem „Dim”, ale nie decyduj z dużym wyprzedzeniem o rozmiarze tablicy. Po prostu nazywamy tablicę z pustymi wartościami w nawiasach (). Jeśli tablica nie zawiera rozmiaru, jest traktowana jako tablica dynamiczna.

Dim MyArray () As String

W momencie, gdy wspomnisz rozmiar tablicy w nawiasie, stanie się ona tablicą statyczną. Dim MyArray (1 do 5) As String

W tablicy dynamicznej zawsze zmieniamy rozmiar tablicy, używając słowa „ReDim” w następnym wierszu kodu.

ReDim MyArray (1 do 6) As String

Każda wartość zapisana w nazwie tablicy w poprzednich krokach, tj. Za pomocą instrukcji „Dim”, ma wartość null, a rozmiar zadeklarowany za pomocą „ReDim” staje się nowym rozmiarem tablicy.

Przykłady użycia instrukcji VBA Redim

Przykład 1

Spójrz na przykład praktycznego wykorzystania instrukcji „ReDim”. Wykonaj poniższe czynności, aby zastosować „ReDim”.

Krok 1: Najpierw utwórz nazwę makra.

Krok 2: Zadeklaruj nazwę tablicy jako ciąg.

Kod:

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

Krok 3: Teraz użyj słowa „Redim” i przypisz rozmiar tablicy.

Kod:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 do 3) End Sub

Krok 4: Teraz nazwa tablicy „MyArray” może zawierać do 3 wartości. Przypisz wartość do tych 3 tablic, takich jak poniższa.

Kod:

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

Zatem pierwsza tablica to słowo „Witamy”, druga tablica to słowo „do”, a trzecia tablica to słowo „VBA”.

Krok 5: Teraz zapisz te wartości tablic w komórkach.

Kod:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 do 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

Krok 6: Jeśli uruchomisz ten kod, powinniśmy mieć te wartości odpowiednio w komórkach A1, B1 i C1.

Przykład 2 - Zmień rozmiar tablicy, pamiętając o starych wartościach.

Gdy nazwa tablicy zostanie przypisana do wartości, możemy również zmienić jej rozmiar w dowolnym momencie procedury, używając słowa „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.

Powód, dla którego musimy użyć słowa „zachowaj”, ponieważ tablica powinna pamiętać stare wartości tablicy w procedurze.

W momencie, gdy zignorujesz słowo „zachowaj”, nie zapamięta starych wartości.

O czym należy pamiętać tutaj

  • ReDim może przechowywać tylko ostatnią wartość tablicy, a nie wiele wartości. Na przykład nie możemy użyć tego kodu „ReDim Preserve MyArray (4 do 5)”. Spowoduje to zgłoszenie błędu.
  • Nie możemy ReDim statycznych tablic. W momencie przypisania rozmiaru tablicy w nawiasach staje się ona tablicą statyczną.
  • Używając ReDim, nie możemy zmienić typu danych. Tablica może zawierać dowolny typ danych, który przypisaliśmy podczas deklarowania tablicy.

Interesujące artykuły...