Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

dynamisch Sortieren

dynamisch Sortieren
17.03.2016 11:23:33
Jens
Hallo,
ich kann mittels des nachfolgenden Code ganz einfach eine Tabelle sortieren.
Nun habe ich aber ein Problem.
Das ganze ist statisch.
Kann man irgendwie den Code so anpassen, dass ab Spalte A in Zeile 1 in Tabelle 2 die Sortierreihenfolge vorgegeben werden kann.
In diesen Fall wäre es
A1 = E
A2 = M
A3 = O
A4 = U
Sprich genau so wie es oben angegeben ist, aber durch die Vorgabe im Sheet können die Bezüge geändert werden.
Der Anfang der Sortierfunktion ist immer Zeile 16 bis zum Ende.
Das Ganze muss aber auch erweiterbar sein. Es könnte auch sein, dass nicht nur 4 Krtierien sind sondern 5 oder 8.
Hat hierzu jemand eine idee?
Sub Sortieren()
Dim rSort As Range
With ActiveWorkbook.Worksheets("Aufstellung")
Set rSort = .Range(.Cells(16, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1000))
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Range("E16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.SortFields.Add Key:=Range("M16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.SortFields.Add Key:=Range("O16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.SortFields.Add Key:=Range("U16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.SetRange rSort
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamisch Sortieren
17.03.2016 11:45:30
Steve
Hallo Jens,
das würde wie folgt funktionieren:
Sub Sortieren()
Dim rSort As Range
Dim wks2 As Worksheet
Set wks2 = ActiveWorkbook.Worksheets("Tabelle2")
With ActiveWorkbook.Worksheets("Aufstellung")
Set rSort = .Range(.Cells(16, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1000))
.Sort.SortFields.Clear
For i = 1 To wks2.Cells(1, wks2.Columns.Count).End(xlToLeft).Column
.Sort.SortFields.Add Key:=ActiveWorkbook.Worksheets("Aufstellung").Cells(16, wks2.Cells(1, _
i)), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
Next i
With .Sort
.SetRange rSort
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub

Code ungetestet!
Vorraussetzung: In Zeile 1 des TB "Tabelle2" steht nichts weiter außer den Buchstaben bzw. Nummern der Spaltenbezeichnung.
lg Steve

Anzeige
AW: dynamisch Sortieren
17.03.2016 12:04:18
Daniel
Hi
dh wenn ich das richtig verstehe, dann gibst du in Spalte A der Tabelle2 die Spaltenbuchstaben der Spalten an, nach denen die Tabelle "Aufstellung" sortiert werden soll.
dann probiers mal so:
Sub Sortieren()
Dim rSort As Range
Dim Z As Long
With ActiveWorkbook.Worksheets("Aufstellung")
Set rSort = .Range(.Cells(16, 1), .Cells.SpecialCells(xlCellTypeLastCell))
End With
With ActiveWorkbook.Worksheets("Tabelle2")
For Z = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
rSort.Sort Key1:=rSort.Cells(1, Range(.Cells(Z, 1).Value & "1").Column), _
order1:=xlAscending, Header:=xlGuess
Next
End With
End Sub
die Syntax der Sortierfunktion entspricht der Schreibweise von Excel 2003
über die Reihenfolge der Sortierungen wird die Sortierhierachie eingehalten.
Gruß Daniel

Anzeige
AW: dynamisch Sortieren
17.03.2016 12:12:56
UweD
so?

Sub Sortieren()
Dim rSort As Range
Dim i As Integer, LR As Integer
Dim TB2
Set TB2 = Sheets("Tabelle2")
With ActiveWorkbook.Worksheets("Aufstellung")
LR = TB2.Cells(TB2.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der SpalteA
Set rSort = .Range(.Cells(16, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1000))
With .Sort
.SortFields.Clear
For i = 1 To LR
If TB2.Cells(i, 1)  "" Then
.SortFields.Add Key:=Range(TB2.Cells(i, 1) & "16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
End If
Next
.SetRange rSort
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
Gruß UweD

Anzeige
AW: dynamisch Sortieren
17.03.2016 12:48:32
jens
@UweD
Ersten warum wir die letzte Zeile der Spalte A abgefragt?.
Die Zeile in der Die Daten stehen ist immer gleich nur die Spalte ändert sich.
Bei mir kommt der Fehler
Die Methode Range für das Objekt Global ist fehlgeschlagen.
.SortFields.Add Key:=Range(TB2.Cells(1, i) & "16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
Weist du warum?

AW: dynamisch Sortieren
17.03.2016 13:13:01
UweD
@UweD
Ersten warum wir die letzte Zeile der Spalte A abgefragt?.
Die Zeile in der Die Daten stehen ist immer gleich nur die Spalte ändert sich.

Weil du im ersten Beitrag geschrieben hattest, dass die Soltierspalten hier stehen:
A1 = E
A2 = M
A3 = O
A4 = U
also habe ich die Zeile 4 als letze gefüllte Zeile ermittelt.
In deinem mitlerweile gezeigten Beispiel habe ich gesehen, dass die Sapltenangaben jetzt in Zeile 1 stehen (also nebeneinander)
Das wäre dann so möglich

Sub Sortieren()
Dim rSort As Range
Dim i As Integer, LC As Integer
Dim TB2
Set TB2 = Sheets("Tabelle2")
With ActiveWorkbook.Worksheets("Aufstellung")
LC = TB2.Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile1
Set rSort = .Range(.Cells(16, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(, 1000))
With .Sort
.SortFields.Clear
For i = 1 To LC
If TB2.Cells(1, i)  "" Then
.SortFields.Add Key:=Range(TB2.Cells(1, i) & "16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
End If
Next
.SetRange rSort
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub

Gruß UweD

Anzeige
AW: dynamisch Sortieren
17.03.2016 13:41:52
jens
Hallo,
danke das war ein Fehler von mir sry.
Ich habe dennoch das Problem mit dem Fehler
Es werden die Zeilen gelb markiert.
.SortFields.Add Key:=Range(TB2.Cells(1, i) & "16"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
Die Methode Range für das Objekt ist fehlgeschlagen.
hast du einen Tipp woraus dies hindeutet?

AW: dynamisch Sortieren
17.03.2016 13:50:21
Daniel
Hi
Der Fehler könnte auf eine fehlende Tabellenblattangabe vor der Range hinweisen.
Range, Cells, Columns Rows ohne Tabellenblattangabe davor bezieht VBA immer auf das Aktive Tabellenblatt (oder auf das Tabellenblatt des Moduls, wenn der Code in einem Tabellenblattmodul liegt)
Da die Range hier aber das Sortierkriterium darstellen soll, muss sie natürlich auf dem selben Tabellenblatt liegen wie der Zellbereich der sortiert werden soll (Worksheets("Aufstellung")), sonst gibt's nen Fehler.
Gruß Daniel

Anzeige
AW: dynamisch Sortieren
17.03.2016 14:58:52
jens
@ Daniel
danke für den Tipp
so bekomme ich aber auch einen Fehler
Worksheets("Aufstellung").Range(TB2.Cells(1, i) & "16"),
@UWED
ich habe den Code noch in eine andere Datei integriert. Deshalb meine Frage.
Ansonsten funktioniert der Code super. Aber eben nicht in meiner neuen Datei.

AW: dynamisch Sortieren
17.03.2016 15:40:40
Daniel
und wie sieht deine neue Datei und dein neuer Code aus?
wir können hier immer noch nicht hellsehen, auch wenn das schon Generationen von Fragestellern immer wieder vermutet haben.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige