Относительно легко сделать это с помощью VBA и пользовательской функции. Поскольку сортировать нужно всего несколько элементов, я использовал простую BubbleSort. Другие методы могут быть использованы также.
Для ввода этой пользовательской функции (UDF)alt-F11 открывает редактор Visual Basic.
Убедитесь, что ваш проект выделен в окне Project Explorer.
Затем в верхнем меню выберите «Вставить / Модуль» и вставьте приведенный ниже код в открывшееся окно.
Чтобы использовать эту пользовательскую функцию (UDF), введите формулу
=sortAlpha(A1:C1)
в диапазоне ячеек, простирающихся через ваш пункт назначения (например: E1: G1), а затем заполнить.
Это формула массива, которая возвращает массив значений. Таким образом, чтобы ввести его, вы бы, например:
- Сначала выберите E1:G1
- Затем наведите курсор на панель формул и введите формулу
- Наконец, вместо того, чтобы просто нажать Enter, вы должны удерживать Ctrl + Shift при нажатии Enter. Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы
Option Explicit
'Comment out next line for case sensitive sorting
Option Compare Text
Function sortAlpha(rg As Range) As String()
Dim S() As String
Dim C As Range
Dim I As Long
ReDim S(0 To rg.Count - 1)
For Each C In rg
S(I) = C.Text
I = I + 1
Next C
SingleBubbleSort S
sortAlpha = S
End Function
Sub SingleBubbleSort(TempArray As Variant)
'copied directly from support.microsoft.com
Dim Temp As Variant
Dim I As Integer
Dim NoExchanges As Integer
' Loop until no more "exchanges" are made.
Do
NoExchanges = True
' Loop through each element in the array.
For I = LBound(TempArray) To UBound(TempArray) - 1
' If the element is greater than the element
' following it, exchange the two elements.
If TempArray(I) > TempArray(I + 1) Then
NoExchanges = False
Temp = TempArray(I)
TempArray(I) = TempArray(I + 1)
TempArray(I + 1) = Temp
End If
Next I
Loop While Not (NoExchanges)
End Sub