Ссылка на решение проблемы (здесь не нашёл, а штука полезная)
09-08-2016. Добавлена корректная сортировка чисел. Автор: МатросНаЗебре
15-09-2016. Минорные изменения для удобства (разные разделители для расцепки/сцепки) и понятные аргументы. Автор: Jack_Famous
А также в посте #15 добавлен макрос от сортировки по месяцам (только для месяцев)
09-08-2016. Добавлена корректная сортировка чисел. Автор: МатросНаЗебре
15-09-2016. Минорные изменения для удобства (разные разделители для расцепки/сцепки) и понятные аргументы. Автор: Jack_Famous
А также в посте #15 добавлен макрос от сортировки по месяцам (только для месяцев)
| Код |
|---|
'Сортировка данных внутри ячейки 'Авторы: GWolf и MCH 'Редактор (сортировка чисел): МатросНаЗебре 'Минорные изменения для удобства: Jack_Famous 'Сайт-источник: http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=72769&MID=609946#message609946 'Сайт-оригинал: http://forum.msexcel.ru/index.php?topic=7488.0 'Аргументы функции: 'Ячейка - ячейка-источник 'РазделительСловосочетаний - необязательный аргумент. Разделитель, по которому определяются границы слов/фраз, которые впоследствии будут отсортированы (по умолчанию - пробел). Указать "10", в качестве переноса строки 'ОбъединитьЧерез - необязательный аргумент. Разделитель, через который сцепляются расцепленные и отсортированные слова/фразы (по умолчанию - пробел). Указать "10", в качестве переноса строки '========================================================================================================================================================================================================================== Function СортироватьВнутриЯчейки(Ячейка As Range, Optional РазделительСловосочетаний As String = " ", Optional ОбъединитьЧерез As String = " ") As String Dim Arr If РазделительСловосочетаний = "10" Then РазделительСловосочетаний = Chr(10) If ОбъединитьЧерез = "10" Then ОбъединитьЧерез = Chr(10) Arr = Split(Ячейка, РазделительСловосочетаний) СортироватьВнутриЯчейки = Join(SortArr(Arr), ОбъединитьЧерез) End Function Function SortArr(ByVal Arr) Dim i&, j&, N&, tmp$ If Not IsArray(Arr) Then SortArr = Arr: Exit Function N = UBound(Arr) For i = 0 To N - 1 For j = i + 1 To N If IsNumeric(Arr(i)) And IsNumeric(Arr(j)) Then If Val(Arr(i)) > Val(Arr(j)) Then tmp = Arr(i): Arr(i) = Arr(j): Arr(j) = tmp Else If Arr(i) > Arr(j) Then tmp = Arr(i): Arr(i) = Arr(j): Arr(j) = tmp End If Next j, i SortArr = Arr End Function |
Изменено: - 16.09.2016 09:28:57
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел)