Dawniej, gdy chciałem odczytać zawartość kilku kolejnych komórek do tablicy to deklarowałem tablicę dynamiczną. Za pomocą instrukcji ReDim zmieniałem rozmiar tablicy a następnie za pomocą pętli for odczytywałem po kolei po jednej komórce do tej tablicy. Oto przykładowy kod:
Sub OdczytajKomorkiDoTablicy_old()
Dim T()
Dim a As Long, Ostatni As Long
'Odczytaj numer ostatniego wiersza w kolumnie A
Ostatni = OstatniWiersz("A")
'Zmień rozmiar tablicy T
ReDim T(1 To Ostatni)
'Ręcznie odczytuj zawartość kolejnych komórek do tablicy
For a = 1 To Ostatni
T(a) = ThisWorkbook.ActiveSheet.Cells(a, 1).Value
Next a
End Sub
Ponieważ nie wiem ile wierszy może być zapisanych w kolumnie A to skorzystałem z dodatkowej funkcji, która sprawdza numer ostatniego wiersza w kolumnie A. Tak wygląda ta funkcja:
Function OstatniWiersz(kolumna As String) As Long
OstatniWiersz = Cells(Rows.Count, kolumna).End(xlUp).Row
End Function
Natomiast można sprytniej (bez zabawy w pisanie pętli for lub for each) odczytać zakres komórek do tablicy.
Najpierw przedstawię prosty przykład, gdzie do dynamicznej tablicy odczytuję „na sztywno” zawartość komórek od A1 do A5
Sub OdczytajKomorkiDoTablicy1()
Dim T()
'Odczytaj do tablicy T "na sztywno" komórki od A1 do A5
T = ThisWorkbook.ActiveSheet.Range("A1:A5").Value
End Sub
Jak widać kod jest banalny. Ale czasami możemy mieć taką sytuację, że nie wiemy ile komórek jest wypełnionych. Wtedy nasz kod będzie nieznacznie bardziej skomplikowany:
Sub OdczytajKomorkiDoTablicy2()
Dim T()
Dim Ostatni As Long
'Odczytaj numer ostatniego wiersza w kolumnie A
Ostatni = OstatniWiersz("A")
'Odczytaj do tablicy T komórki od A1 do ostatniej wypełnionej komórki w kolumnie A
T = ThisWorkbook.ActiveSheet.Range(Cells(1, 1), Cells(Ostatni, 1)).Value
End Sub
Uwaga: jeśli odczytujemy dane nie od pierwszego wiersza, to pierwszy odczytany wiersz z danego zakresu będzie w naszej tablicy pod indeksem 1. Przykładowo: odczytując dane z komórek od A5 do A7 wartości komórek zostaną zapisane w naszej tablicy kolejno pod indeksami 1, 2 i 3.
Wskazówka: Ponieważ odczytujemy dane z jednej kolumny i kilku kolejnych wierszy to nasza dynamiczna tablica jest jednowymiarowa. Jeśli chcemy odczytać dane z „dwuwymiarowego” zakresu np. od A1 do B5, to wtedy nasza tablica T będzie dwuwymiarowa.
Po przeczytaniu tej lekcji zdałem sobie sprawę, że pół życia człowiek robił to „na około”.