Tablice w Visual Basic for Application

Tablice w Visual Basic for Application to struktury, które zazwyczaj przechowują zestawy powiązanych zmiennych tego samego typu. Dostęp do wpisów tablicy uzyskuje się poprzez ich indeks numeryczny.

Na przykład istnieje zespół 20 osób, których nazwiska należy zapisać do późniejszego wykorzystania w kodzie VBA. Można po prostu zadeklarować 20 zmiennych do przechowywania każdej nazwy, na przykład:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Ale możesz użyć znacznie prostszego i bardziej zorganizowanego sposobu – przechowywać listę imion członków zespołu w tablicy 20 zmiennych, takich jak sznur:

Dim Team_Members (1 do 20) jako ciąg

W wierszu pokazanym powyżej zadeklarowaliśmy tablicę. Teraz napiszmy wartość do każdego z jego elementów, tak:

Team_Members(1) = "Jan Kowalski"

Dodatkowa zaleta przechowywania danych w tablicy, w porównaniu do używania oddzielnych zmiennych, staje się widoczna, gdy konieczne staje się wykonanie tej samej akcji na każdym elemencie tablicy. Gdyby imiona członków zespołu były przechowywane w 20 oddzielnych zmiennych, za każdym razem napisanie tego samego działania na każdym z nich wymagałoby 20 wierszy kodu. Jeśli jednak nazwy są przechowywane w tablicy, możesz wykonać żądaną akcję z każdym z nich za pomocą prostej pętli.

Jak to działa, pokazano poniżej z przykładem kodu, który wyświetla kolejno nazwy każdego członka zespołu w komórkach kolumny. A aktywny arkusz programu Excel.

For i = 1 do 20 Cells(i,1).Value = Team_Members(i) Next i

Oczywiście praca z tablicą przechowującą 20 nazw jest znacznie mniej kłopotliwa i dokładniejsza niż używanie 20 oddzielnych zmiennych. Ale co, jeśli te nazwiska to nie 20, ale 1000? A jeśli dodatkowo wymagane jest oddzielne przechowywanie nazwisk i nazwisk?! Oczywiste jest, że już niedługo obsługa takiej ilości danych w kodzie VBA bez pomocy tablicy stanie się całkowicie niemożliwa.

Tablice wielowymiarowe w programie Excel Visual Basic

Omówione powyżej tablice Visual Basic są uważane za jednowymiarowe. Oznacza to, że przechowują prostą listę nazwisk. Jednak tablice mogą mieć wiele wymiarów. Na przykład dwuwymiarową tablicę można porównać z siatką wartości.

Załóżmy, że chcesz zapisać dzienne dane o sprzedaży za styczeń dla 5 różnych zespołów. Będzie to wymagało dwuwymiarowej tablicy składającej się z 5 zestawów metryk przez 31 dni. Zadeklarujmy taką tablicę:

Dim Jan_Sales_Figures(1 do 31, 1 to 5) jako waluta

Aby uzyskać dostęp do elementów tablicy Jan_Sprzedaż_Liczby, musisz użyć dwóch indeksów wskazujących dzień miesiąca i numer polecenia. Na przykład adres elementu zawierającego dane sprzedaży dla 2-och drużyny dla 15 tys Styczeń zostałby napisany tak:

Jan_Sprzedaż_Liczby(15, 2)

W ten sam sposób można zadeklarować tablicę z 3 lub więcej wymiarami – wystarczy dodać dodatkowe wymiary do deklaracji tablicy i użyć dodatkowych indeksów, aby odwołać się do elementów tej tablicy.

Deklarowanie tablic w programie Excel Visual Basic

Wcześniej w tym artykule przyjrzeliśmy się już kilku przykładom deklarowania tablic w VBA, ale ten temat zasługuje na bliższe przyjrzenie się. Jak pokazano, tablicę jednowymiarową można zadeklarować w następujący sposób:

Dim Team_Members (1 do 20) jako ciąg

Taka deklaracja informuje kompilator VBA, że tablica Członkowie drużyny składa się z 20 zmiennych, do których można uzyskać dostęp przy indeksach od 1 do 20. Możemy jednak pomyśleć o numerowaniu naszych zmiennych tablicowych od 0 do 19, w którym to przypadku tablicę należy zadeklarować w następujący sposób:

Dim Team_Members (0 do 19) jako ciąg

W rzeczywistości domyślnie numeracja elementów tablicy zaczyna się od 0, a w deklaracji tablicy początkowy indeks może w ogóle nie być określony, na przykład:

Dim Team_Members(19) jako ciąg

Kompilator VBA potraktuje taki wpis jako zadeklarowanie tablicy 20 elementów o indeksach od 0 do 19.

Te same zasady obowiązują podczas deklarowania wielowymiarowych tablic Visual Basic. Jak już pokazano w jednym z przykładów, podczas deklarowania tablicy dwuwymiarowej indeksy jej wymiarów oddziela się przecinkiem:

Dim Jan_Sales_Figures(1 do 31, 1 to 5) jako waluta

Jeśli jednak nie określisz początkowego indeksu dla obu wymiarów tablicy i zadeklarujesz go w ten sposób:

Dim Jan_Sales_Figures(31, 5) jako waluta

wtedy ten wpis będzie traktowany jako tablica dwuwymiarowa, której pierwszy wymiar zawiera 32 elementy o indeksach od 0 do 31, a drugi wymiar tablicy zawiera 6 elementów o indeksach od 0 do 5.

Tablice dynamiczne

Wszystkie tablice w powyższych przykładach mają ustaloną liczbę wymiarów. Jednak w wielu przypadkach nie wiemy z góry, jaki rozmiar powinna mieć nasza tablica. Możemy wyjść z sytuacji deklarując ogromną tablicę, której wielkość z pewnością będzie większa niż jest to konieczne do naszego zadania. Ale takie rozwiązanie będzie wymagało dużo dodatkowej pamięci i może spowolnić program. Jest lepsze rozwiązanie. Możemy użyć tablicy dynamicznej – jest to tablica, której wielkość można ustawiać i zmieniać dowolną ilość razy podczas wykonywania makra.

Tablica dynamiczna jest deklarowana z pustymi nawiasami, tak jak poniżej:

Dim Team_Members() jako ciąg

Następnie będziesz musiał zadeklarować rozmiar tablicy podczas wykonywania kodu za pomocą wyrażenia Przyciemnij:

ReDim Team_Members(1 do 20)

A jeśli podczas wykonywania kodu musisz ponownie zmienić rozmiar tablicy, możesz ponownie użyć wyrażenia ReDim:

Jeśli rozmiar_zespołu > 20, to przymnij członków zespołu (1 do rozmiaru_zespołu) zakończ, jeśli

Należy pamiętać, że zmiana rozmiaru tablicy dynamicznej w ten sposób spowoduje utratę wszystkich wartości przechowywanych w tablicy. Aby przechowywać dane już w tablicy, musisz użyć słowa kluczowego Zachowaćjak pokazano poniżej:

Jeśli wielkość_zespołu > 20, to Redim Zachowaj członków zespołu(1 do wielkości_zespołu) Zakończ, jeśli

Niestety słowo kluczowe Zachować może służyć tylko do zmiany górnej granicy wymiaru tablicy. W ten sposób nie można zmienić dolnej granicy tablicy. Ponadto, jeśli tablica ma wiele wymiarów, użyj słowa kluczowego Zachować, można zmienić rozmiar tylko ostatniego wymiaru tablicy.

Dodaj komentarz