(Embora não seja a solução ideal), uma solução é implementar 'classificações' em uma tabela classificada usando o VBA. O código a seguir faz isso:
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
Nota:
1) Coluna A é onde a descrição do texto todo é escrita. A primeira parte do código localiza quantas linhas estão na tabela de todos.
2) O primeiro tipo classifica os todos pela manhã (coluna L), depois pela tarde (coluna N) e depois pela noite (coluna P).
3) O próximo loop for localiza o número de linhas que são um todo da manhã. Então o tipo seguinte ordena todos os dias pela prioridade. Então a mesma coisa é feita para a tarde todos e a tarde todos.
Obrigado ao @ fixer1234 pela ideia.