Tablice VBA – informacje dla zaawansowanych
Zakładam, że jeśli czytasz ten artykuł to wcześniej zapoznałeś się z podstawowymi informacjami o tablicach VBA, o których pisałem w tym artykule: VBA Tablice. W artykule, który czytasz poznasz bardziej zaawansowane informacje o tablicach VBA. Są to m.in funkcje, którymi operujesz na tablicach, sposoby jak szybko odczytać dane z tablicy i jak je szybko do tablicy wgrać.
Funkcje Tablic LBound UBound IsArray
W przypadku tablic VBA możemy korzystać z funkcji odnoszących się do całej tablicy. Możemy m.in. za ich pomocą sprawdzić, czy nasza zmienna jest tablicą. Możemy także sprawdzić indeks górny i indeks dolny tablicy, by sprawdzić jej wielkość. By przetestować wyżej wymienione funkcje stwórzmy prostą tablicę i uzupełnijmy ją wartościami, pamiętając by nie wypełniać wszystkich elementów tablicy. Kod tworzący i wypełniający taką tablicę zamieszczam poniżej:
'tomaszkenig.pl Sub TabliceFunkcje() Dim TabTablica(9) As String TabTablica(3) = "Robert Kubica" TabTablica(6) = "Michael Schumacher" TabTablica(8) = "Nico Resberg" Debug.Print IsArray(TabTablica) Debug.Print LBound(TabTablica) Debug.Print UBound(TabTablica) End Sub
Jak widzisz stworzyliśmy tablicę 10-cio elementową o indeksach od 0 do 9. Jak widzisz funkcja Is Array pomaga nam stwierdzić, czy element jest tablicą. Funkcje LBound i Ubound zwracają indeksy, bez względu na to, czy elementy tablicy są wypełnione. Poniżej rozszerzony opis:
Rozszerzony opis funkcji tablic
IsArray – Funkcja zwraca wartość True, jeśli badany element jest tablicą.
LBound(tablica [,wymiar]) – Funkcja zwraca dolny indeks tablicy. Jeśli pracujemy na tablicach wielowymiarowych, drugi argument funkcji służy do podania wymiaru w tablicy, który chcemy zbadać. Z podstawowych informacji o tablicach VBA wiemy, że wymiary mogą mieć różną rozpiętość. Jeśli mamy do czynienia z tablicą wielowymiarową, a nie uzupełnimy argumentu określającego wymiar, funkcja zwróci indeks dla pierwszego wymiaru tablicy.
UBound(tablica [,wymiar]) – Funkcja zwraca górny indeks tablicy. Jeśli pracujemy na tablicach wielowymiarowych, drugi argument funkcji służy do podania wymiaru w tablicy, który chcemy zbadać. Jeśli mamy do czynienia z tablicą wielowymiarową, a nie uzupełnimy argumentu określającego wymiar, funkcja zwróci indeks dla pierwszego wymiaru tablicy.
Przykład LBound i UBound dla tablic wielowymiarowych
Poniżej krótki przykład zastosowania funkcji LBound i Ubound dla tablicy dwuwymiarowej i trójwymiarowej. Wymiar określamy liczbą od 1 do liczby wymiarów tablicy. Jeśli go nie określimy, funkcje VBA LBound i UBound zwrócą informacje o indeksach dla pierwszego wymiaru tablicy.
'tomaszkenig.pl Sub TabliceFunkcje2() Dim TabTablica1(9, 1 To 5) As String Dim TabTablica2(2, 1 To 5, 18) As String Debug.Print LBound(TabTablica1, 2) Debug.Print UBound(TabTablica1) Debug.Print LBound(TabTablica2) Debug.Print UBound(TabTablica2, 3) End Sub
Tworzenie tablicy za pomocą funkcji Array
Tablice możesz tworzyć także za pomocą Funkcji VBA Array. W jaki sposób to zrobić? Stwórz zmienną o typie Variant. Następnie Przypisz do niej wartości w argumentach funkcji Array oddzielone przecinkami. Przykład poniżej:
'tomaszkenig.pl Sub FunkcjaArray() Dim Panstwa As Variant Panstwa = Array("Polska", "Niemcy", "Czechy", "Węgry") Debug.Print Panstwa(0) Dim Miasta As Variant Miasta = Array("Warszawa", "Berlin", "Praga", "Budapeszt") Debug.Print Miasta(0) End Sub
W ten sposób zadeklarowana i uzupełniona tablica ma jedną wadę. Składa się z elementów o typie danych Variant, który nie jest typem wydajnym. Sam jednak sposób tworzenia tablicy jest na tyle szybki, że warto z niego korzystać.
Szybkie pobieranie danych z arkusza do tablicy VBA
W jaki sposób szybko pobrać dane do tablicy VBA? Dane do tablicy VBA możesz pobrać na wiele sposobów. Możemy oczywiście wykorzystać od tego pętlę, która pobierze wszystkie elementy arkusza po kolei, jednak nie jest to szybkie rozwiązanie. Najłatwiejszym sposobem, by wprowadzić dane z arkusza Excel do tablicy dwuwymiarowej (bo arkusz też ma dwa wymiary) jest odniesienie się do zakresu. W celu ćwiczenia w załączonym do tego artykułu pliku dodałem arkusz zawierający dane, które tworzyliśmy przy pomocy pętli Do Loop w jednym z poprzednich rozdziałów kursu VBA Excel. Poniższy przykład wprowadza te właśnie dane do tablicy. Naszym zadaniem jest wprowadzenie do tablicy danych i pokazanie danych z drugiego rekordu tabeli. Nagłówki przy imporcie danych z arkusza do tablicy pomijamy.
Sub ArkuszDoTablicy() Dim DaneZArkusza As Variant DaneZArkusza = Range("A2:E30") Debug.Print DaneZArkusza(2, 1) Debug.Print DaneZArkusza(2, 2) Debug.Print DaneZArkusza(2, 3) Debug.Print DaneZArkusza(2, 4) Debug.Print DaneZArkusza(2, 5) End Sub
Artykuł jest częścią kursu Vba Excel. Całość kursu znajdziesz pod tym linkiem: Kurs VBA. Poniżej zamieszczam plik z kodem programu:
3 komentarze “Tablice w VBA – dodatkowe informacje”
Dzięki, tego właśnie szukałem. Czy tablice i kolekcje to to samo?
Cześć,
nie , nie jest to to samo. O kolekcjach napiszę jeszcze w tym miesiącu. Kolekcje VBA mogą przechowywać dane różnych typów. Tablice zawierają jeden typ danych.
Hej! Bardzo przydatna strona dla kogoś kto potrzebuje dokładnie zaznajomić się z VBA .
Niestety- tablice to dla mnie magia, podstawy przerobiłam ale przy debugowaniu funkcji IsArray i UBond-poległam..
Pokazują mi się wartośći 0, TRUE, 0. Proszę o poradę dlaczego 🙁