VBA - zadeklaruj (przyciemnij), utwórz i zainicjuj zmienną tablicową

Ten samouczek pokaże, jak deklarować (przyciemniać), tworzyć i inicjować zmienne tablicowe w VBA

Co to jest zmienna tablicowa VBA?

Zmienna tablicowa VBA może być traktowana jako grupa zmiennych przechowywanych pod tą samą nazwą i mających ten sam typ danych. Tablica może przechowywać tekst, liczby lub obiekty.

Odwołujesz się do elementu w tablicy, używając jego numeru indeksu.

Zmienną tablicową można zadeklarować w taki sam sposób, jak każdą inną zmienną, używając słowa kluczowego Dim, Static, Public lub Private.

Tablice statyczne

Istnieją 2 rodzaje tablic - statyczne i dynamiczne. Tablica statyczna jest deklarowana z jej rozmiarem określonym podczas początkowego deklarowania tablicy. Jest również nazywany stałą tablicą.

1 Dim intA(4) jako liczba całkowita

Powyższa tablica jest zadeklarowana przy użyciu instrukcji Dim na poziomie procedury lub modułu, a rozmiar tablicy wynosi 5, ponieważ nie zadeklarowaliśmy wartości LBound tablicy.

Nie, to nie literówka! Rozmiar tablicy wynosi 5, pomimo wprowadzenia 4 do tablicy. Dzieje się tak, ponieważ indeksy tablicy automatycznie zaczynają się od zera.

Indeksy tablicy

Indeksy tablicy automatycznie zaczynają się od zera, chyba że Podstawa opcji 1 jest zadeklarowana w górnej części modułu kodu.

Gdyby Podstawa opcji 1 zostanie zadeklarowana, tablice automatycznie zaczną się od 1.

Uważam jednak, że deklarowanie zmiennych w taki sposób jest problematyczne. Recenzenci kodu mogą nie być świadomi, że tablice zaczynają się od zera lub deklaracji Option Base 1

Zamiast tego wolę jawnie zadeklarować pozycję początkową i końcową tablic:

1 Dim intA(2 do 5) jako liczba całkowita

Zauważ, że gdy to zrobisz, możesz rozpocząć tablicę od dowolnej liczby (nie tylko 1 lub 0).

Tablice dynamiczne

Zmienna tablicy dynamicznej to tablica, której rozmiar można zmienić w czasie wykonywania. Deklarujesz zmienne dynamiczne bez rozmiaru.

1 Dim intA() jako liczba całkowita

Możesz użyć instrukcji ReDim, aby określić rozmiar tablicy po utworzeniu tablicy.

1 ReDim wewnA(2)

W dowolnym momencie możesz zmienić rozmiar tablicy dynamicznej. Jednak podczas korzystania z instrukcji ReDim wszystkie istniejące wartości są usuwane. Aby zachować istniejące wartości tablicy, użyj ReDim Zachowaj zamiast.

1 ReDim Zachowaj intA(2)

Tablicę dynamiczną można zadeklarować na poziomie procedury, modułu lub globalnego, ale instrukcji ReDim można używać tylko w ramach procedury.

Tablice wariantów

Tablice wariantów to tablice dynamiczne, z którymi łatwiej się pracuje.

1 Dim nazwy zmiennych()

Zauważ, że nie musisz określać typu danych (zakłada się, że jest to wariant) ani rozmiaru tablicy.

Jak zobaczymy poniżej, możesz zainicjować tablice wariantów za pomocą funkcji Array (nie musisz najpierw zmieniać rozmiaru tablic)!

Zadeklaruj moduł i tablice publiczne

Jak pokazano powyżej, tablice mogą być deklarowane w ramach procedur do użycia w ramach tej procedury:

1234 Podrzędna tablica statyczna()'deklaruj tablicę z wartością LBound równą 1 i wartością UBound równą 4Dim IntA(1 do 4) jako liczba całkowitaNapis końcowy

Ale można je również zadeklarować na poziomie modułu lub globalnego.

1234567 Opcja Wyraźna'deklaruj tablicę z wartością LBound równą 1 i wartością UBound równą 4Dim IntA(1 do 4) jako liczba całkowitaPodrzędna tablica statyczna()Napis końcowy

W tym przykładzie zmienną tablicową można wywołać w dowolnym miejscu tego modułu kodu. Zamiast tego możesz zadeklarować publiczną tablicę, która może być używana w całym projekcie VBA (patrz następna sekcja).

Deklarowanie tablicy publicznej

Tablicę statyczną publiczną deklarujesz tak samo, jak deklarujesz zmienną publiczną.

1 Public strNames(3) jako String

Ta deklaracja musiałaby znaleźć się na górze modułu, poniżej Option Explicit. Może być następnie używany w całym projekcie VBA w dowolnym module lub procedurze.

Jeśli zadeklarujesz tablicę na górze modułu, ale ze słowem kluczowym Dim, użycie tej tablicy jest ograniczone do tego pojedynczego modułu. Próba użycia tablicy w oddzielnym module spowodowałaby błąd.

Zainicjuj tablice

Możesz przypisać wartości do tablicy statycznej w następujący sposób.

1234567891011 Podrzędna tablica statyczna()'deklaruj tablicę z wartością LBound równą 1 i wartością UBound równą 4Dim IntA(1 do 4) jako liczba całkowita'zainicjuj tablicę'IntA(1) = 10ŚrA(2) = 20ŚrA(3) = 30ŚrA(4) = 40'pokaż wynik pozycji 2 tablicy w bezpośrednim oknieDebug.Print IntA(2)Napis końcowy

Jeśli uruchomisz powyższą procedurę, w bezpośrednim oknie zostanie wyświetlona wartość 20.

Możesz również przypisać wartości do tablicy dynamicznej w ten sam sposób

12345678910111213 Podrzędna tablica dynamiczna()'deklaruj tablicę dynamiczną, ale z pominięciem wartości powiązanychDim IntA() jako liczba całkowita'zainicjuj tablicę'ReDim IntA(1 do 4)IntA(1) = 10ŚrA(2) = 20ŚrA(3) = 30ŚrA(4) = 40'pokaż wynik pozycji 2 tablicy w bezpośrednim oknieDebug.DrukujŚr.A(2)Napis końcowy

Funkcja tablicy

Jednakże, tylko z tablicą wariantów, możesz użyć funkcji Array, która może być prostsza niż przy użyciu standardowej metody.

12 'wypełnij tablicęintA() = Tablica(10, 20, 30, 40)

Wypełnij tablicę za pomocą pętli

Możesz także wypełniać tablice, przeglądając zakres komórek w programie Excel

1234567891011121314151617 PodtestDynamicArrayFromExcel()'deklaruj tablicęDim strNames() jako ciąg'deklaruj liczbę całkowitą, aby policzyć wiersze w zakresieDim n jako liczba całkowita'deklaruj liczbę całkowitą dla pętliDim i jako liczba całkowita'policz wiersze w zakresien = Range("A1", Range("A1").End(xlDown)).Rows.Count'zmień tablicę do ilości wierszy w zakresie.ReDim strNames(n)Dla i = 0 To nstrNames(i) = Zakres("A1").Przesunięcie(i + 1, 0)Dalej ja'pokaż wartości w tablicyDołącz do MsgBox(strNames())Napis końcowy

Ponownie zainicjuj tablice

Możesz ponownie zainicjować swoją tablicę na dowolnym etapie kodu, ale wtedy utracisz oryginalną wartość zawartą w tej pozycji w tablicy.

1234567891011121314 Podrzędna tablica statyczna()'deklaruj tablicę z wartością LBound równą 1 i wartością UBound równą 4Dim IntA(1 do 4) jako liczba całkowita'zainicjuj tablicę'IntA(1) = 10ŚrA(2) = 20ŚrA(3) = 30ŚrA(4) = 40'pokaż wynik pozycji 2 tablicy w bezpośrednim oknieDebug.Print IntA(2)'zainicjuj ponownie tablicęintA(2)= 200Debug.Print IntA(2)Napis końcowy

W powyższym przykładzie tablica Static zachowa wszystkie wartości, z wyjątkiem wartości na pozycji 2 - ta wartość zmieni się na 200.

Korzystanie z ReDim

Jeśli używasz tablicy dynamicznej, instrukcja ReDim służy do ustawiania rozmiaru tablicy. Możesz użyć instrukcji ReDim później w kodzie, aby zmienić rozmiar tablicy tyle razy, ile potrzebujesz. Poniższy wiersz kodu ponownie zainicjuje tablicę intA, aby miała rozmiar 2 (Pamiętaj - indeks tablicy zaczyna się od 0!)

1 ReDim intA(1) jako liczba całkowita

Tak więc kod zawierający instrukcję ReDim wyglądałby jak w poniższym przykładzie.

1234567891011121314151617 Podtest tablica dynamiczna()'deklaruj tablicęDim intA() jako liczba całkowitaReDim wewnA(2)'wypełnij tablicę liczbamiintA(0) = 2intA(1) = 5intA(2) = 9'pokaż numer na pozycji 1'Debug.Drukuj intA(1)'przymnij tablicę, aby zmienić rozmiarPrzem. wewn.A(3)intA(0) = 6intA(1) = 8'tym razem pokaż numer na pozycji 1Debug.Drukuj intA(1)Napis końcowy

Jeśli uruchomisz powyższą procedurę, wartość 5 zostanie wyświetlona w bezpośrednim oknie, a następnie zostanie wyświetlona wartość 8, gdy zmienimy rozmiar tablicy za pomocą ReDim i ponownie ją wypełnimy. Jednakże, ponieważ nie wypełniliśmy IntA(2) i nie użyliśmy Re-Dim Preserve, wartość w tej pozycji w tablicy zostanie usunięta, a zarówno pozycja 3, jak i 4 w tablicy będą wynosić zero.

Korzystanie z ReDim Preserve

Jeśli użyjemy ReDim Preserve, zachowa oryginalne wartości zawarte w tablicy.

1234567891011121314151617 Podtest tablica dynamiczna()'deklaruj tablicęDim intA() jako liczba całkowitaReDim wewnA(2)'wypełnij tablicę liczbamiintA(0) = 2intA(1) = 5intA(2) = 9'pokaż numer na pozycji 2'Debug.Drukuj intA(2)'przymnij tablicęPrzem. wewn.A(3)intA(0) = 6intA(1) = 8'pokaż ponownie numer na pozycji 2'Debug.Drukuj intA(2)Napis końcowy

W obu oknach komunikatów wyświetlonych powyżej liczba 9 pojawi się, gdy instrukcja ReDim Preserve zachowała tę wartość w tej pozycji.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave