Clever-Excel-Forum

Normale Version: Makro Sortieren bei wachsender Tabelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich habe eine Tabelle mit 3 Spalten und aktuell 4 Zeilen. Diese Tabelle soll nach Spalte1 (B) aufsteigend sortiert werden.  Dafür habe ich ein Makro aufgezeichnet welches mit der Tastenkombi Shift+Strg+Pfeiltaste die atbelle nach unten und zur Seite markiert. Jetzt habe ich diese über die Sortierfunktion sortiert. Funktioniert. Wenn jetzt aber eine Zeile dazu kommt funktioniert zwar das Markieren aber im Makro steht es nur bis zur Zeile 6 gehen soll. 

Kann mir jemand sagen was ich wo umschrieben muss, damit das Makro bis zu letzten ausgefüllten Zeile geht.

Vielen Dank vorab Schellfred

Sub Markieren_sort_Spalte1_auf()
'
' Markieren_sort_Spalte1_auf Makro
'

'
    Range("B3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range("B3"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").Sort
        .SetRange Range("B3:D6")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Hallo,

mit aufgezeichneten Makros hat man meistens wenig Freude. In diesem Fall müssen eben die statischen Sortierbereiche dynamisiert werden. Bei dieser Gelegenheit können auch die Select-Anweisungen gelöscht werden, die sind überflüssig.
Ok,
aber was muss ich dann wo hin schreiben??
Hallo,

versuche es mal so:

Code:
Sub sort()
    ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Add2 Key:=Range("B3:B" & Range("B2").End(xlDown).Row _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tabelle1").sort
        .SetRange Range("B2:D" & Range("B2").End(xlDown).Row)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Super, vielen Dank.
Jetzt werde ich Selbststudium betreiben und versuchen heraus zu finden was die ganzen Zeilen Bedeuten.
Hallo

Code:
Range("B2").End(xlDown).Row    'sucht das Zeilenende ab Zelle B2 nach unten
Cells(Rows.Count,2).End(xlUp).Row  'sucht in der gleichen Spalte die letzte Zeile vom Tabellen Ende nach oben
Beide Varianten haben ihre kleine Tücken!  Gibt es ab Zelle B2 nach unten keine Daten mehr ist die LastZell   1.048.576   Nach oben ist es die 1

mfg  Gast 123