Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
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

Tabelle sortieren

Tabelle sortieren
19.03.2015 11:45:56
Matthias
Hallo,
ich ohne Probleme eine Liste nach zwei Kriterien sortieren.
Sub benutzerdefiniert_sortieren_mit_zwei_Listen()
'von Uwe Küstner
Dim lngCLC As Long
Dim lngListExist As Long
Dim lngOC As Long
Dim vListArr As Variant
'erste Sortierung
vListArr = Array("B11:B15")
lngListExist = Application.GetCustomListNum(vListArr)
If lngListExist > 0 Then
lngOC = lngListExist + 1
Else
Application.AddCustomList listArray:=vListArr
lngCLC = Application.CustomListCount
lngOC = lngCLC + 1
End If
Range("B2").Sort Key1:=Range("C3"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=lngOC, _
MatchCase:=False, Orientation:=xlTopToBottom
If lngListExist = 0 Then Application.DeleteCustomList ListNum:=lngCLC
'zweite Sortierung
vListArr = Array("C11:C15")
lngListExist = Application.GetCustomListNum(vListArr)
If lngListExist > 0 Then
lngOC = lngListExist + 1
Else
Application.AddCustomList listArray:=vListArr
lngCLC = Application.CustomListCount
lngOC = lngCLC + 1
End If
Range("B2").Sort Key1:=Range("B3"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=lngOC, _
MatchCase:=False, Orientation:=xlTopToBottom
If lngListExist = 0 Then Application.DeleteCustomList ListNum:=lngCLC
End Sub
Drei Kriterien machen mir aber Probleme.
Wie setzt man so was um?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle sortieren
19.03.2015 13:50:13
Klexy
Was macht dieses Makro angeblich "ohne Probleme"?
Und was willst du eigentlich machen?

AW: Tabelle sortieren
19.03.2015 14:08:50
Matthias
Es sortiert ohne Probleme eine Tabelle nach zwei Kriterien.
Jetzt möchte ich aber nicht zwei Kriterien haben sondern drei.
Hier bekomme ich aber Probleme.

AW: Tabelle sortieren
19.03.2015 16:19:20
Klexy
Alles, was das Makro mach, ist die Tabelle zuerst nach Spalte C, dann nach Spalte B jeweils aufsteigend zu sortieren (nicht nach "Kriterien").
90% des Codes sind zu dem Zweck überflüssig.
Und der Teil des Codes, der das bewirkt, bewirkt das eher zufällig, weil er schlampig geschrieben ist.
Ich vermute, du hast den Code von irgendwo rauskopiert, wo er möglicherweise einen ganz anderen Zweck hatte.
Schau mal in Google, wie sortieren in VBA geht. Dazu gibt es schon 10.000 fertige Beispiele. Das ist kein "Problem", das hier im Forum erörtert werden müsste.

Anzeige
AW: Tabelle sortieren
19.03.2015 17:04:45
Matthias
Hallo,
ich habe mittels des Makrorecoders gemacht.
Funktioniert auch so weit gut.
Sub Sortieren()
Range("A3").Select
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("A3:A10" _
), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="RLT", _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("B3:B10" _
), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="Luftart", _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("C3:C10" _
), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="NR", _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A2:D10")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Kann man den Code irgendwie so erweiteren, dass zusätzliche Zeile die während der Aufnahme noch nicht vorhanden waren, auch mit in die Sortierung mit hineinlaufen.
Jetzt ist es so, dass zusätzliche Zeilen ausserhalb des Bereiches liegen.

Anzeige
AW: Tabelle sortieren
20.03.2015 09:30:58
Klexy
statt
Key:=Range("A3:A10"
folgendes:
Key:=Range("A3"
(ebenso bei B und C) - das ist ein Quatsch, den der Makrorekorder da einfügt.
und statt
.SetRange Range("A2:D10")
folgendes:
.SetRange Range(Cells(2, 1), Cells(Worksheets("Tabelle1").UsedRange.Rows.Count + 1, 4))
Noch ein grundsätzlicher Tip: du hast über der eigentlichen Tabelle eine Leerzeile. Wahrscheinlich aus dekorativen Gründen. Das sollte grundsätzlich unterlassen werden. Eine Tabelle sollte immer in A1 beginnen. Alles andere führt früher oder später zu Komplikationen .

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige