Odszukiwanie numeru ostatniego wiersza w tabeli
Często w VBA operując na danych ujętych w tabelach mamy konieczność dodania do tabelki Excela kolejnego wiersza/rekordu z danymi. By zrobić to sprawnie, zwykle jest konieczność znalezienia lokalizacji ostatniego niepustego wiersza. By znaleźć ostatni wypełniony rekord w arkuszu możemy skorzystać z prostego kodu VBA:
Sub LastRow() Dim intLastRow As Integer intLastRow = Range("A1").End(xlDown) + 1 MsgBox intLastRow End Sub
Wyżej zapisany kod umożliwia nam poznanie numeru wiersza w kolumnie A1. Numer wiersza zwracany jest w oknie MsgBox. Sposób jest dobry o ile sprawdzenie następuje na kolumnie, która zawsze jest wypełniona. Dla przykładu jest to np kolumna identyfikujące id rekordu. W momencie, gdy niektóre z komórek wierszy są puste, bądź pomiędzy rekordami są całe puste wiersze możemy skorzystać z makra opartego o przerobione funkcjonalności znajdź w Excel. Kod zamieszczony poniżej działa także w sytuacjach, gdy pomiędzy danymi są całe puste kolumny lub wiersze. Podobnie jak w pierwszym przykładzie, numer wiersza jest zwracany w oknie MsgBox.
Sub FindLastRow() Dim rngCell As Range Set rngCell = Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:= _ False, SearchFormat:=False) '.Activate If Not rngCell Is Nothing Then MsgBox "Ostatni wiersz nr: " & rngCell.Row & " i ostatnia kolumna nr: " & rngCell.Column End Sub
Warto zauważyć, że nasz przykład polega na modyfikacji makra funkcjonalności Znajdź/Zamień w Excel. Główna różnica polega na tym, że wyrażenie, którego szukamy w arkuszu zamieniamy na znak „*” reprezentujący każde możliwe wyrażenie.
W ten sposób znalazłeś dzięki VBA indeks ostatniego wiersza w tabeli. Plik Excel z powyższymi przykładami załączam poniżej:
Jeśli szukasz podobnych przykładów praktycznego zastosowania VBA zapraszam do odwiedzenia tego działu. Zachęcam także do zapoznania się z działem kurs VBA online.
13 komentarzy “Jak znaleźć ostatni wypełniony wiersz w Excel VBA”
Dzięx, bardzo przydatne. Szukam jeszcze skryptu vb, który pomoże mi wyciągnąć parametry tabel przestawnych w rapocie. W jaki asposób da się to zrobić?
Dzięki odwiedzenie strony i za zasugerowanie nowego tematu. Odpowiedź na Twoje pytanie zamieszczam w nowym artykule: Wyświetlanie informacji o tabelach przestawnych w Excel VBA.
Dzięki, przyda się
Nareszcie jakieś sensowne wyjaśnienie
Super, tego szukałem. Dzięki
Dzięki. Małe pytanie, jak przeszukać wybrany arkusz np arkusz3?
Pozdrawiam
Przemek, umieść przed kodem:
Sheets(„Arkusz3”).Select
i powinno grać. Pozdr.
Tak, tak jest ok. Wcześniej już to sprawdziłem. Zastanawiałem się tylko czy jest inna możliwość bo przy przeszukiwaniu arkusza i dopisywaniu w komórkach arkusze się przełączają.
Zastanawiam się jednak bardziej jak umieścić w komórce niestandardowy hyperlink.
poprzez …formula =
=HIPERŁĄCZE(„#WYKAZ!C”&WIERSZ(INDEKS(WYKAZ!B:B;PODAJ.POZYCJĘ(B2;WYKAZ!B:B;0)));WYSZUKAJ.PIONOWO(B2;WYKAZ!B:C;2;FAŁSZ))
Pozdrawiam
Sub LastRow()
Dim intLastRow As Integer
intLastRow = Range(„A1”).End(xlDown) + 1
MsgBox intLastRow
End Sub
u mnie, pod Excel 2010 (14.0.7190.500, 32 bit) ten kod nie działa,
wywala error „Type mismatch”, pomaga zmiana na:
intLastRow = Range(„A1”).End(xlDown).Row + 1
bez .Row zwracana jest wartość ostatniego pola, u mnie string.
Pozdrawiam,
Jarek
DJG – Masz rację
Taki zapis jak w oryginale musi zwracać wartość komórki, a nie numer wiersza
A gdybym musiał sprawdzić dwie kolumny i zwrócić ta która ma większy wynik?
Sub LastRow()
Dim intLastRow As Integer
intLastRow = Range(„A1”).End(xlDown) + 1
MsgBox intLastRow
End Sub
wywala błąd type mismatch
W moim przypadku działa zapis
Range(„A1”).End(xlDown).Row