Я пытаюсь отсортировать список в Excel. Учитывая набор данных:
1
2A
3
2
3
5A
6
7
7А
Я хочу сначала отсортировать по номеру, а затем по букве. Пример: я хочу, чтобы 2А был раньше 3, а не после 7.
Я пробовал поиск в Google, но мне нужен макрос, а не то, чтобы человек нажимал на функцию сортировки в Excel.
Sub original_sort_code()
Dim a, i As Long
With Cells(1).CurrentRegion
a = .Value
ReDim Preserve a(1 To UBound(a, 1), 1 To UBound(a, 2) + 1)
With CreateObject("VBScript.RegExp")
.Pattern = "\d+(\.\d+)?"
For i = 2 To UBound(a, 1)
If .test(a(i, 1)) Then a(i, UBound(a, 2)) = _
Format$(.Execute(a(i, 1))(0), String(20, "0")) & a(i, 1)
Next
End With
VSortM a, 2, UBound(a, 1), UBound(a, 2), 1
.Value = a
End With
End Sub
Private Sub VSortM(ary, LB, UB, ref, Optional ord As Boolean = 1)
Dim M As Variant, i As Long, ii As Long, iii As Long, temp
i = UB: ii = LB
M = ary(Int((LB + UB) / 2), ref)
Do While ii <= i
If ord Then
Do While ary(ii, ref) < M: ii = ii + 1: Loop
Else
Do While ary(ii, ref) > M: ii = ii + 1: Loop
End If
If ord Then
Do While ary(i, ref) > M: i = i - 1: Loop
Else
Do While ary(i, ref) < M: i = i - 1: Loop
End If
If ii <= i Then
For iii = LBound(ary, 2) To UBound(ary, 2)
temp = ary(ii, iii): ary(ii, iii) = ary(i, iii): ary(i, iii) = temp
Next
ii = ii + 1: i = i - 1
End If
Loop
If LB < i Then VSortM ary, LB, i, ref, ord
If ii < UB Then VSortM ary, ii, UB, ref, ord
End Sub
Я хочу сначала отсортировать по номеру, а затем по букве. Пример: я хочу, чтобы 2А был раньше 3, а не после 7.