(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.