Excel i VBA deklarowanie tablicy statycznej i dynamicznej

Tablice przydają się do tymczasowego przechowywania ciągów danych określonego typu i do szybszych obliczeń. Typ zmiennej przechowywanej w tablicy może być różnoraki w zależności od potrzeb, może to być ciąg znaków alfanumerycznych (String), byte, integer.

Podam jeden z wielu sposobów deklarowania przykładowej tablicy dwuwymiarowej (100 wierszy i 3 kolumny) przechowującej dane typu string

Niech nasza tablica nazywa się po prostu Tablica

Dim Tablica (100,3) as String

Jest to definicja tablicy statycznej kiedy wiemy ile wierszy i kolumn będzie zawierać.

Jeżeli nasza tablica ma za zadanie przechowywać dane, których ilości nie możemy na razie przewidzieć wówczas piszemy

Dim Tablica () as String

Ma to na celu zapobieganie zbędnemu przewymiarowaniu tablicy i zabezpiecza nas przed jej niedoszacowaniem
Weźmy na przykład określenie maksymalnej liczby wierszy i kolumn w danym arkuszu excela o czym pisałem w kilku poprzedzających wpisach a głównie we wpisie Excel 2010 - określenie maks. używanej ilości wierszy i kolumn za pomocą kodu VBA.

jeśli te zmienne (ilość wierszy i ilość kolumn) nazwiemy odpowiednio

wiersze, kolumny to aby dookreślić tablicę piszemy

Redim Tab(wiersze, kolumny)

i nasza tablica będzie ich mieć tyle ile trzeba :)

Zwykle jest jednak tak że pobieramy do tablicy tylko niektóre konkretne kolumny z arkusza ich liczbę (kolumn) jesteśmy w stanie przewidzieć.

Teraz zagadnienie innego typu: jak zapisać dane do odpowiedniej kolumny w tablicy ?

Niech za przykład posłuży nam taka tabelka

zapisdotablicy1.png

Pętla For … Next która będzie pomocna przy wczytywaniu będzie wyglądać mniej więcej tak:

For i =1 to 3
Tablica(i,1)=Cells(i,1)
Tablica(i,2)=Cells(i,2)
Tablica(i,3)=Cells(i,3)
Next

dla każdego i (w sensie wiersza) będą zapisane kolejno dane do trzech kolumn tabeli

Gdybyśmy chcieli dla sprawdzenia pobrać z tablicy element Tablica(3,3) to byłaby to wartość “30″ piszę w cudzysłowiu gdyż byłyby to znaki 3 i 0 dlatego że jest to tablica z elementami typu String

UWAGA na koniec:
Jeśli dopiero zaczynasz przygodę z makrami w VBA to powyższe przykłady zapisuj wewnątrz procedury Sub Twoja_nazwa ()
np.

Sub ZapisDoTablicy()

Dim Tablica (3,3) as String
Sheets(”Arkusz1″).select
‘ Wskazujemy z którego arkusza pobieramy dane do tablicy
for i =1 to 3
Tablica(i,1)=Cells(i,1)
Tablica(i,2)=Cells(i,2)
Tablica(i,3)=Cells(i,3)
Next
‘ sprawdzamy element Tablica(3,3)
MsgBox Tablica(3, 3)
End sub

Taką procedurę zapisz w module (nie w kodzie arkusza)

Na górze modułu napisz jeszcze taki wiersz

Option base 1

Daje to informację dla VBA że twoje tablice są liczone od 1-go elementu a nie domyślnie od zerowego. W stosunku do tablic jest to ułatwienie.

Jak to wygląda w VBA w anglojęzycznej wersji Excel 2010

zapisdotablicy2.png

Jak to działa

zapisdotablicy3.png

Książka, która może pomóc w lepszym zrozumieniu tego tematu:

Pobierz fragment

onlyregistered1.png Przydała Ci się ta informacja? Subskrybuj mój kanał RSS, by być na bieżąco z nowymi wiadomościami.

----------------------------------------------------------
TANIE I TERMINOWE PRZEPISYWANIE TEKSTU z: rękopisu, maszynopisu, plików dźwiękowych (kontakt do mnie lub tel kom 513 635 592)
----------------------------------------------------------

Leave a Reply