Страницы: 1
RSS
Сортировка данных в одной ячейке
 
Решил создать отдельныю тему. Есть ячейка в которой через запятую перечислены буквенно-числовые значения, например Ю-13,Ю-2,Ю-354,Ю-7. Можно как-нибудь, желательно с помощью пользовательской функции упорядочить эти значения по алфавиту в одной же ячейке, т.е. практически отсортировать по возрастанию как в случае если были бы столбец из этих значений в отдельности (Ю-2,Ю-7,Ю-13,Ю-354)?
 
Решил создать отдельныю тему. Есть ячейка в которой через запятую перечислены буквенно-числовые значения, например Ю-13,Ю-2,Ю-354,Ю-7. Можно как-нибудь, желательно с помощью пользовательской функции упорядочить эти значения по алфавиту в одной же ячейке, т.е. практически отсортировать по возрастанию как в случае если были бы столбец из этих значений в отдельности (Ю-2,Ю-7,Ю-13,Ю-354)?
 
Вероятно поможет надстройка PLEX и использование функций SubString, GetNumbers, GetText, MultiCat.
 
А без Plex'а? Наверняка ведь кто-нибудь сталкивался с такой проблемой?
 
{quote}{login=Horn}{date=08.02.2008 12:32}{thema=}{post}А без Plex'а? Наверняка ведь кто-нибудь сталкивался с такой проблемой?{/post}{/quote}  
Собственно не сталкивался...  
Но идея заинтересовала !  
Вот держи :  
 
Function SORT(inpute)  
' 8.02.2008 автор Drony  
ishodnoe = inpute  
a = Len(ishodnoe) ' длина текста ячейки  
b = Len(Replace(ishodnoe, " ", "")) ' длина текста ячейки без ПРОБЕЛОВ  
c = a - b ' количество ПРОБЕЛОВ  
F = c + 1 ' количество отдельностоящих слов в ячейке  
 
' Создаем массив  
Dim D()  
ReDim D(F)  
n = 0  
Start = 1  
For x = 1 To F  
   n = n + 1  
'    ReDim Preserve D(n)  
   If n = F Then D(n) = Mid(ishodnoe, Start, (a - Start + 1)): GoTo 10  
   D(n) = Mid(ishodnoe, Start, (InStr(Start, ishodnoe, " ", 1) - Start))  
10:  
Start = InStr(Start, ishodnoe, " ") + 1  
Next x  
 
' сортируем массив ПУЗЫРЬКОВЫМ методом  
Dim First As Integer, Last As Integer  
Dim i As Integer, j As Integer  
Dim Temp As String  
First = LBound(D)  
Last = UBound(D)  
For i = First To Last - 1  
For j = i + 1 To Last  
If D(i) > D(j) Then  
Temp = D(j)  
D(j) = D(i)  
D(i) = Temp  
End If  
Next j  
Next i  
 
' выгружаем массив  
For i = LBound(D) + 1 To UBound(D)  
SORT = SORT & D(i) & " "  
Next i  
End Function  
 
 
 
Только в исходных ячейках я " , " заменил на " "  - пробел.  
Сильно стого не судите, может можно как то и упростить...  
Я шел по простому пути, т.е. то с чем когда-либо сталкивался, с помощью тех кусков и решил задачу...
 
Drony, спасибо! Но в Ваша функция работает немного неправильно, а как исправить я не знаю. Значений на 1 меньше, чем в исходном диапазоне, причем не отображается минимальное из них. Может быть посмотрите пример, с Вашей функцией, я приложил. Еще, у меня разделитель именно запятая, а не пробел. Не подскажите можно ли, а если можно то как переделать под запятую? Ну и еще, хотя, наверное, это слишком сложно и придется переделывать всю функцию. Упорядочивается все по первым числам, т.е. вот так, например А-1044 А-2 А-37. Возможно ли сделать чтоб отображалось именно по числам, т.е. А-2 А-37 А-1044? В общем, наверное, слишком сложную функцию я хочу, еще раз спасибо за помощь
 
Drony, спасибо! Но в Ваша функция работает немного неправильно, а как исправить я не знаю. Значений на 1 меньше, чем в исходном диапазоне, причем не отображается минимальное из них. Может быть посмотрите пример, с Вашей функцией, я приложил. Еще, у меня разделитель именно запятая, а не пробел. Не подскажите можно ли, а если можно то как переделать под запятую? Ну и еще, хотя, наверное, это слишком сложно и придется переделывать всю функцию. Упорядочивается все по первым числам, т.е. вот так, например А-1044 А-2 А-37. Возможно ли сделать чтоб отображалось именно по числам, т.е. А-2 А-37 А-1044? В общем, наверное, слишком сложную функцию я хочу, еще раз спасибо за помощь
 
Вот собственно функция Drony
Страницы: 1
Читают тему
Наверх