Jak sprytnie odczytać zakres komórek do tablicy?

przez | 2024-01-20

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.

Jeden komentarz do „Jak sprytnie odczytać zakres komórek do tablicy?

  1. Karol Dwojak

    Po przeczytaniu tej lekcji zdałem sobie sprawę, że pół życia człowiek robił to „na około”.

    Odpowiedz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.