W tym samouczku omówione zostaną tablice dwuwymiarowe i wielowymiarowe w języku VBA.
Tablica wielowymiarowa (macierze 2D)
Tablice wielowymiarowe to tablice zawierające więcej niż jeden wymiar, zwykle dwa lub trzy wymiary, ale tablice mogą mieć do 32 wymiarów.
Zadeklaruj macierz 2D
Aby utworzyć tablicę z więcej niż jednym wymiarem, użyj przecinków, aby zdefiniować każdy oddzielny wymiar:
1 | Dim intArr(2,3) jako Integer |
Wypełnianie tablicy 2D
Poniższy kod wypełni tablicę 2D, a następnie wypełni wiersze i kolumny arkusza wartościami z tablicy.
1234567891011121314151617181920212223242526 | Sub Populate2D()'deklaruj tablicę 2DDim intA(2, 3) As Integer'deklaruj zmienne'Dim rw As IntegerDim col As Integer'wypełnij tablicęintA(0, 0) = 45intA(0, 1) = 50intA(0, 2) = 55intA(0, 3) = 60intA(1, 0) = 65intA(1, 1) = 70intA(1, 2) = 75intA(1, 3) = 80intA(2, 0) = 85intA(2, 1) = 90intA(2, 2) = 95intA(2, 3) = 100'przeprowadź pętlę przez tablicę i wypełnij ExcelDla rw = 0 do 2Dla kol = 0 do 3Komórki(rw + 1, kol + 1). Wartość = intA(rw, kol)Następny kolorNastępny rwNapis końcowy |
Twój arkusz kalkulacyjny Excel powinien zostać wypełniony w następujący sposób.
Wypełnianie tablicy 2D z danych Excel
Poniższy kod wypełni tablicę 2D z arkusza programu Excel, a następnie wypełni inny arkusz danymi.
1234567891011121314151617181920212223242526 | Sub Populate2D()„Zadeklaruj arkusze”Dim ws_Source As WorksheetDim ws_Destination As Worksheet'Zadeklaruj tablicęDim wsData(10, 2) jako wariant„Zadeklaruj zmienne”Dim rw jako liczba całkowitaDim col As Integer'odwołaj się do arkusza źródłowegoUstaw ws_Source = Arkusze("Arkusz1")'pobierz informacje z arkusza źródłowego i wypełnij tablicęDla rw = LBound(wsData, 1) To UBound(wsData, 1)Dla col = LBound(wsData, 2) To UBound(wsData, 2)wsData(rw, col) = ws_Source.Range("A2").Offset(rw, col).ValueNastępny kolorNastępny rw„odnieś się do arkusza przeznaczenia”Ustaw ws_Destination = Arkusze("Arkusz2")' wypełnij arkusz docelowy z tablicyDla rw = LBound(wsData, 1) To UBound(wsData, 1)Dla col = LBound(wsData, 2) To UBound(wsData, 2)ws_Destination.Range("A1").Offset(rw,col).Value = wsData(rw,col)Następny kolorNastępny rwNapis końcowy |
Zmiana rozmiaru za pomocą funkcji ReDim i Re-Dim Preserve
Możesz zmienić rozmiar tablicy za pomocą ReDim.
1234567891011121314151617 | Sub Resize2D()'deklaruj tablicęDim varArray() jako Variant'deklaruj rozmiar tablicyReDim varArray(1, 2)varArray(0, 0) = "Mel Smith"varArray(0, 1) = "Fred Buckle"varArray(0, 2) = "Jane Eyre"varArray(1, 0) = "Księgowy"varArray(1, 1) = "Sekretarka"varArray(1, 2) = "Doktor"'ponownie zadeklaruj rozmiar tablicyReDim varArray(0, 1)'wypełnij ponownie tablicęvarArray(0, 0) = "Mel Smith"varArray(0, 1) = "Fred Buckle"Napis końcowy |
Gdy ponownie zadeklarujesz macierz, utracisz wszystkie dane wcześniej przechowywane w macierzy, chyba że użyjesz przycisku Oświadczenie dotyczące zachowania ReDim.
12345678910111213141516 | Sub Resize2D()'deklaruj tablicę Dim varArray() jako Variant'deklaruj rozmiar tablicyReDim varArray(1, 2)varArray(0, 0) = "Mel Smith"varArray(0, 1) = "Fred Buckle"varArray(0, 2) = "Jane Eyre"varArray(1, 0) = "Księgowy"varArray(1, 1) = "Sekretarka"varArray(1, 2) = "Doktor"'ponownie zadeklaruj rozmiar tablicyReDim Preverve varArray(1, 3)'wypełnij tablicę dodatkowymi wartościamivarArray(0, 3) = "Rob Barnes"varArray(1, 3) = "Hydraulik"Napis końcowy |
Możesz zmienić rozmiar ostatniego wymiaru tablicy tylko wtedy, gdy chcesz zachować oryginalne dane w tablicy za pomocą Re-Dim Preserve.
Po kliknięciu debugowania błąd zostanie podświetlony, pokazując, że pierwszy wymiar w tablicy nie jest taki sam jak pierwszy wymiar, gdy rozmiar tablicy został pierwotnie zadeklarowany.