Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Сортировка в combobox по алфавиту
 
Уважаемые специалисты!
Подскажите, пожалуйста, как можно в комбобоксе значения расположить по алфавиту? Спасибо.
 
Обычно сортируют массив, а уже его в КомбоБокс.
 
Юрий, Вы имеете ввиду (в моем примере) непосредственно в листе таблицы "Данные"?
Если да, то у меня так не получится:
1. лист "Данные" будет постоянно дополняться.
2. Колонок несколько. Какую сортировать по алфавиту?
 
Файл не смотрел. Ещё вариант: сбрасывать массив на лист (можно скрытый или временный), там сортировать диапазон, забирать его обратно в массив и в КомбоБокс.
 
Я такие варианты нашел, но не сообразил, как приварить их к моему примеру.
 
Цитата
Константин написал: Колонок несколько. Какую сортировать по алфавиту?
Вот этот вопрос улыбнул ) Вы у МЕНЯ спрашиваете? Вам ведь виднее))
 
Юрий, с выгрузкой на временный лист (создание временного листа, выгрузка уникальных значений на этот лист, сортировка значений по алфавиту, выгрузка в комбобокс) примерно понял. Тут два вопроса:
1. Это замедлит работу файла? (комбобоксов 5-6, строк для сортировки - более 600)
2. Временный лист убивать после закрытия формы?
 
Есть готовые функции сортировки двумерных массивов по любому столбцу.
P.S. Посмотрел файл - так там в комбобокс одномерный массив заливается, его сортировать так вообще сотни функций есть.
Или вместо словаря можно arraylist из .net использовать, там встроенная сортировка есть. Вот только не помню сейчас как там с уникальными... Но можно в связке с словарём использовать.
Файл кстати у меня не работает, компонентов не хватает, т.ч. тестировать нечего, код править незачем.
Изменено: Hugo - 23 Мар 2015 23:22:02
 
Игорь говорит, что у Вас там одномерный массив - откуда множество столбцов?
Если будете с листом, то зачем его удалять, создавать... Пусть живёт невидимым))
 
туговато)) ладно, поразбираюсь))
 
сортировка массива
Живи и дай жить..
 
Слэн, огромное спасибо!))
Я начал было уже прикручивать, и почти начало получаться, у тут Вы спасенье))

А у меня пошло таким путем  - во вложении. (правда что-то последняя колонка не допиливается, туговато мне осваиваются массивы)))))
 
Слэн, подскажите, пожалуйста:
Код
Public Sub QuickSortNonRecursive___(SortArray())
Dim i As Long, j As Long, lb As Long, ub As Long
Dim stack() As QuickStack, stackpos As Long, ppos As Long, pivot As Variant, swp, maxstack&
    On Error GoTo er
    ReDim stack(1 To 16)
...
ReDim stack(1 to 16) - это сделано по конкретному примеру, а если это динамический диапазон, т.е. я не знаю насколько он еще "уйдет" вниз, то как лучше написать?

и еще не совсем понял, почему в:
Код
Sub t()
Dim arr(1 To 9, 1 To 3), r
r = [a1:c9]
For i = 1 To 9
For j = 1 To 3
arr(i, j) = r(i, j)
Next
Next
Call sort_range(arr)
[a1:c9] = arr
End Sub

Sub test()
Dim tm!, i&, r As Range
Dim arr(1 To 9, 1 To 3), r_arr
Application.ScreenUpdating = False
Set r = [a1:c9]
r_arr = r
For i = 1 To 9
For j = 1 To 3
arr(i, j) = r_arr(i, j)
Next
Next

tm = Timer
For i = 1 To 99
    r.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
'Call sort_range(arr)
    r.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Next
Debug.Print Timer - tm
Application.ScreenUpdating = True
End Sub

r = [A1:C9]
почему именно такой?
Изменено: Константин - 24 Мар 2015 20:32:38 (изначально текст вставился не как код)
 
Цитата
Константин написал:  что-то последняя колонка не допиливается
Уберите это Val() - откуда оно там?
Страницы: 1
Читают тему (гостей: 1)