Excel - Sortierung innerhalb einer Sortierung

1264
James

Ich habe eine Excel-Tabelle mit meinen Aufgaben. Jede Zeile in der Tabelle ist eine Aufgabe, und jede Spalte enthält ein Attribut dieser Aufgabe (z. B. die Priorität der Aufgabe). Ich habe auch drei Kolumnen, die ausdrücken, ob ich es heute morgen, nachmittags oder abends machen möchte.

Ich möchte diese Aufgaben auf folgende Weise sortieren können:

1) ganz oben möchte ich alle todos für den morgen haben. Ich möchte, dass diese Aufgaben nach Priorität sortiert werden,

2) dann möchte ich alle todos für den nachmittag. Ich möchte, dass diese Aufgaben nach Priorität sortiert werden,

3) dann die Aufgaben für den Abend, sortiert nach Priorität,

4) dann alle übrigen todos.

Mehr Details:

  • einigen todos wurde eine Priorität von 1-5 zugewiesen, aber andere todos haben eine leere Zelle in der Prioritätsspalte.

  • Wenn ich ein ToDo für den Morgen haben möchte, lege ich eine 1 in die Morgensäule. Bei anderen Aufgaben kann es eine 0 in der Morgenspalte geben oder sie ist leer. Ähnlich für die Nachmittags- und Abendsäulen.

Vielen Dank.

BEARBEITEN: Ich habe zum Beispiel folgende Daten:

 Todo Priority Morning Afternoon Evening Write report 4 1  Research 5 1  Dinner 1 Prepare for meeting 3 1 Read draft  Phone colleague 5 1 

Ich möchte, dass es sortiert wird als:

 Todo Priority Morning Afternoon Evening  Research 5 1  Write report 4 1  Prepare for meeting 3 1 Phone colleague 5 1 Dinner 1 Read draft  
0
Kann jemand die Ablehnung erklären? Glücklich zu versuchen und mich besser zu erklären. Wenn es bereits eine Antwort gibt, lass es mich wissen. Ich hatte einen guten Blick und konnte nichts finden, wusste aber nicht, welche Suchbegriffe verwendet werden sollten. James vor 7 Jahren 0
Haben Sie sich die eingebaute mehrspaltige Sortierung angesehen? Sie können dies in mehreren Schritten tun, wenn Sie zu viele Spalten haben. fixer1234 vor 7 Jahren 0
Ja. Ich habe versucht, die eingebaute mehrspaltige Sortierung zu verwenden. Ich kann es nicht zum Laufen bringen, wenn ich es nur einmal benutze. Aber jetzt haben Sie vorgeschlagen, es mehrmals zu verwenden. Ich denke, ich habe eine Lösung: 1) Sortieren Sie alle Aufgaben nach Morgen, dann Nachmittag und dann Abend in absteigender Reihenfolge. 2) Wählen Sie alle morgendlichen Aufgaben aus und sortieren Sie sie nach Priorität. Wählen Sie dann alle Nachmittags-Aufgaben aus und sortieren Sie sie nur nach Priorität. Zum Schluss sortieren Sie den ganzen Abend nach Priorität. James vor 7 Jahren 0
Sie können mehrere Spalten gleichzeitig ausführen. Sortieren Sie alle Prioritäten in der ersten Sortierung. Wenn Sie die verbleibenden Spalten sortieren, ist dies bereits in der richtigen Reihenfolge. Das spart mehrere Schritte. Sie sollten dies in zwei Schritten tun können. fixer1234 vor 7 Jahren 1
Ich habe keinen bereiten Zugriff auf Excel und ich habe vergessen, wie viele Sortieroptionen Sie in einem Durchlauf ausführen können, aber ich weiß, dass es mindestens zwei sind. Die Schritte wären also: Wählen Sie immer den gesamten Datenblock aus. 1. Durchlauf: 1. Sortierspalte = Morgen, 2. Sortierspalte = Priorität. 2. Pass: 1. Sortierreihe = Abend, 2. Sortierreihe = Nachmittag. fixer1234 vor 7 Jahren 1
Ich verstehe nicht, was Sie unter Sortenauswahl in einem Pass verstehen. James vor 7 Jahren 0
Wählen Sie den gesamten Datenblock aus und wählen Sie dann im Menü die Option Sortieren. Ich vergesse, ob es sofort mehrere Stellen für die Eingabe von Sortierspalten enthält oder Sie klicken auf etwas, um weitere Sortierspalten hinzuzufügen. Sie können jedoch mehrere Spalten zum Sortieren angeben. Das obere Eingabefenster wird mit der ersten Sortierspalte oder ähnlich gekennzeichnet. Geben Sie den Spaltenbuchstaben ein und geben Sie die Sortierrichtung an. Das nächste Eingabefenster wird als zweite Sortierspalte oder ähnlich bezeichnet. Geben Sie dort den Spaltenbuchstaben ein und wählen Sie die Sortierrichtung. Klicken Sie auf OK, um die Sortierung durchzuführen. Das ist ein Pass. Wiederholen Sie dies mit zwei weiteren Spalten für den zweiten Durchgang. fixer1234 vor 7 Jahren 1

1 Antwort auf die Frage

1
James

(Obwohl dies nicht die ideale Lösung ist), besteht die Lösung darin, Sortierungen innerhalb einer sortierten Tabelle mithilfe von VBA zu implementieren. Der folgende Code macht dies:

Sub SortByToday() ' ' SortByToday Macro '  ' Dim row As Long Dim rows As Long Dim topRow As Long Dim bottomRow As Long  For row = 2 To 1000 If Range("A" & row).Value = "" Then rows = row Exit For End If Next  ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("L2"), Range("L" & rows)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("N2"), Range("N" & rows)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("P2"), Range("P" & rows)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range(Range("A1"), Range("W" & rows)) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With  'find the number of morning todos For row = 2 To 1000 If Range("L" & row).Value <> 1 Then bottomRow = row Exit For End If Next  'sort on the morning todos only If bottomRow <> 2 Then ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("D2"), Range("D" & bottomRow - 1)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range(Range("A2"), Range("W" & bottomRow - 1)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If  topRow = bottomRow  For row = topRow To 1000 If Range("N" & row).Value <> 1 Then bottomRow = row Exit For End If Next  If bottomRow <> topRow Then ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("D" & topRow), Range("D" & bottomRow - 1)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range(Range("A" & topRow), Range("W" & bottomRow - 1)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If  topRow = bottomRow  For row = topRow To 1000 If Range("P" & row).Value <> 1 Then bottomRow = row Exit For End If Next  If bottomRow <> topRow Then ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Range("D" & topRow), Range("D" & bottomRow - 1)) _, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range(Range("A" & topRow), Range("W" & bottomRow - 1)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If  End Sub 

Hinweis:

1) In Spalte A wird die ToDo-Textbeschreibung geschrieben. Der erste Teil des Codes ermittelt, wie viele Zeilen sich in der Tabelle der Aufgaben befinden.

2) Die erste Sortierung sortiert die Aufgaben nach Morgen (Spalte L), dann nach Nachmittag (Spalte N) und dann nach Abend (Spalte P).

3) Die nächste for-Schleife findet die Anzahl der Zeilen, die morgendliche Aufgaben erledigen. Dann sortiert die folgende Sortierung die Morgendos nach Priorität. Dann wird dasselbe für die Nachmittags- und Abend-Aufgaben erledigt.

Danke an @ fixer1234 für die Idee.