Makro Sortieren bei wachsender Tabelle
#1
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


Angehängte Dateien
.xlsm   Sortieren.xlsm (Größe: 13,42 KB / Downloads: 3)
Antworten Top
#2
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Ok,
aber was muss ich dann wo hin schreiben??
Antworten Top
#4
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
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#5
Super, vielen Dank.
Jetzt werde ich Selbststudium betreiben und versuchen heraus zu finden was die ganzen Zeilen Bedeuten.
Antworten Top
#6
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste