Поскольку существует только 3 значения, мы используем вспомогательный столбец, а затем присваиваем ему значения.Затем мы сортируем и затем окончательно удаляем вспомогательный столбец.
Допустим, ваши данные выглядят следующим образом
![enter image description here](https://i.stack.imgur.com/Pznry.png)
Попробуйте этот код.Я подключил код, поэтому у вас не должно возникнуть проблем с его пониманием.
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long, lCol As Long
Dim rng As Range
Dim ColName As String
'~~> Change this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Insert a helper column in Col A
.Columns(1).Insert Shift:=xlToRight
.Cells(1, 1).Value = "TmpHeader"
'~~> Get Last Row and last Column
'~~> I am assuming that headers are in row 1
lRow = .Range("B" & .Rows.Count).End(xlUp).Row
lCol = .Cells(1, Columns.Count).End(xlToLeft).Column
ColName = Split(Cells(, lCol).Address, "$")(1)
'~~> Insert the formula in Col A
.Range("A2:A" & lRow).Formula = "=IF(RC[1]=""enrolled"",1,IF(RC[1]=""waitlisted"",2,3))"
'~~> Set your range
Set rng = .Range("A1:" & ColName & lRow)
'~~> Sort it
rng.Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'~~> Delete the helper column
.Columns(1).Delete
End With
End Sub
Когда вы запускаете приведенный выше код, он вставляет вспомогательный столбец, а затем вставляет формулу =IF(B2="enrolled",1,IF(B2="waitlisted",2,3))
.присваивает значения 1, 2 и 3 на основе значения, зарегистрировано ли оно, находится в списке ожидания или отменено.
![enter image description here](https://i.stack.imgur.com/9nhqo.png)
После вставки формулы мыотсортировать по столбцу A в порядке возрастания и затем окончательно удалить вспомогательный столбец.
![enter image description here](https://i.stack.imgur.com/N1UXd.png)