VBAsic.eu: Profesjonalna automatyzacja zadań MS Excel

[VBA] Zmienne tablicowe (tablice w VBA)

Gdy posiadamy dużą ilość danych tego samego typu zasadnym jest użycie zmiennej tablicowej, która przechowa nam wszystkie dane pod jedną nazwą. Do poszczególnych elementów tablicy odwołujemy się używając indeksu elementu, który nas interesuje. W ten sposób możemy odczytywać i zapisywać wartości w tablicy bez trudności.
Z uwagi na dużą ilość wyników rezultaty poszczególnych procedur będą wyświetlane w okienku ‘Immediate Window’ – aby załączyć to okienko użyj skrótu klawiszowego CTRL+G w aktywnym oknie edytora Visual Basic [VBE; skrót do edytora w excelu Alt+F11]; okno ‘Immediate’ powinno być widoczne w dolnej części edytora VBE.

Przykłady użycia tablic

Deklarowanie, wypełnienie i wyświetlenie elementów

Sub tablice_p1()
  'deklaracja zmienne tablicowej z 4 elementami
  'domyślnie pierwszy element ma indeks 0
  Dim i(3) As Integer 
    For k = LBound(i) To UBound(i)
        i(k) = k * 5
        Debug.Print k, i(k)
    Next k
End Sub

Re-deklaracja [zmiana rozmiaru] tablicy

Sub tablice_p2()
 'deklaracja zmiennej tablicowej bez podania ilości elementów
 Dim i() As Integer
 
 ReDim i(3) As Integer 're-deklaracja górnego zakresu
  i(3) = 5             'przypisanie wartości
   Debug.Print i(3)    'wyświetlenie elementu o indeksie 3
 
  're-deklaracja górnego zakresu
  ReDim Preserve i(4) As Integer
  i(4) = 66 'przypisanie wartości do elementu o indeksie 4
 
  Debug.Print i(3), i(4) 'ponowne wyświetlenie wyników
End Sub

Ręczne definiowanie tablicy

Sub tablice_p3()
Dim i 'pamięć typu variant
i = Array(1, 2, 3, 4, 5, "a")
  'wyświetlenie wyników
    Debug.Print "dolny index: " & LBound(i)
    Debug.Print "górny index: " & UBound(i)
    Debug.Print "pierwszy element: " & i(LBound(i))
    Debug.Print "przedostatni element: " & i(UBound(i) - 1)
    Debug.Print "ostatni element: " & i(UBound(i))
End Sub

Pobranie tablicy z arkusza

Sub tablica_p4()
    'do testu wypełnij komórki A1:C10 aktywnego arkusza
    'dowolnym tekstem, który wyświetli się w 'Immediate'
    tablica = Range("a1:c10").Value
 
    Debug.Print "ilość wierszy: " & UBound(tablica, 1)
    Debug.Print "ilość kolumn: " & UBound(tablica, 2)
 
    'gdzie tablica(indeks wiersza, indeks kolumny)
    Debug.Print tablica(2, 1) 'drugi wiersz pierwsza kolumna
    Debug.Print tablica(4, 2) 'czwarty wiersza druga kolumna
    'szósty wiersz, ostatnia kolumna w tablicy
    'jeśli jest tylko jedna kolumna to wyświetli się pierwsza
    Debug.Print tablica(6, UBound(tablica, 2))
End Sub

Deklarowanie tablicy z wykorzystaniem własnego typu

deklaracja typu musi być nad wszystkimi procedurami / funkcjami w module

Type osoba
    imie As String
    wiek As Integer
End Type
 
Sub tablice_p5()
    'tablica 11 elementowa typu "osoba"
    Dim grupa_osob(10) As osoba
 
    'wypełnienie pierwszego elementu tablicy
    grupa_osob(0).imie = "Jan"
    grupa_osob(0).wiek = 23
 
    'instrukcja grupująca dla pierwszego elementu
    With grupa_osob(0)
        Debug.Print "Imie: " & .imie & ", wiek: " & .wiek
    End With
 
    'wynik bez instrukcji grupującej
    'użyłem znaku "_" aby złamać linię instrukcji
    Debug.Print "Imie: " & grupa_osob(0).imie & _
                ", wiek: " & grupa_osob(0).wiek
End Sub


Potrzebujesz pomocy w stworzeniu narzędzia ?

Pamiętaj

Serwis VBAsic.eu oferuje pomoc w zakresie automatyzacji zadań MS Excel z wykorzystaniem VBA. Potrzebujesz makro lub funkcji niestandardowej, której nie ma w Excel ? Nie zwlekaj czekamy na Twoje zgłoszenie.

Wyślij zgłoszenie z pomocą formularza na stronie