ich habe die Aufgabe, die Zeile des letzten (untersten) Eintrags in einer Tabelle zu ermitteln. Dies soll mit einer rekursiven Funktion in VBA passieren. Das Prinzip ist mir eigentlich klar:
Teile die Tabelle in der Hälfte und wenn du in der einen Hälfte was findest, dann teile den Bereich wieder.
Ich habe auch ein Makro (zugegeben nicht von mir...), dass funktioniert, aber ... ich verstehe es absolut nicht.
meine Fragen:
Kann mir jemand erklären, was da passiert?
Warum ist zum Schluss LastRow = lngFirstRow?
Kann ich diese "Function" auch in einer Tabelle als Funktion nutzen? wenn ja, wie?
Habt ihr vielleicht andere Vorschläge?
vielen Dank für eure Hilfe
Jakob
PS: ich habe das Makro von einem Bekannten, der es aber auch nicht geschrieben hat. Christoph M kennen wir beide nicht. Vielleicht kennt ihr ihn ja.
Sub test()
MsgBox LastRow(Sheets("Tabelle1"))
End Sub
Function LastRow(wks As Worksheet, Optional lngFirstRow&, Optional lngLastRow&) As Long
'Christoph M.
Dim lngTmp&
With Application
If .CountA(wks.Rows(wks.Rows.Count)) Then
LastRow = wks.Rows.Count: Exit Function
End If
If lngFirstRow = 0 Then lngFirstRow = 1
If lngLastRow = 0 Then lngLastRow = wks.Rows.Count
lngTmp = ((lngFirstRow + lngLastRow) / 2) \ 1
If lngLastRow > lngFirstRow + 1 Then
If .CountA(wks.Rows(lngTmp & ":" & lngLastRow)) Then lngFirstRow = lngTmp
If .CountA(wks.Rows(lngFirstRow & ":" & lngTmp)) Then lngLastRow = lngTmp
LastRow wks, lngFirstRow, lngLastRow
End If
End With
LastRow = lngFirstRow
End Function