powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / а как сортировать массивы в VBA ?
22 сообщений из 47, страница 2 из 2
а как сортировать массивы в VBA ?
    #35751746
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVI
А иде в предложенном примере (сортировка с помощью адо рекордсета) вы нашли запрос или вообще хоть какое нибудь пересечение с вашей ссылкой об утечках ?
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751777
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RestavraciyaZVI
А иде в предложенном примере (сортировка с помощью адо рекордсета) вы нашли запрос или вообще хоть какое нибудь пересечение с вашей ссылкой об утечках ?

Ссылка Вами дана на код для Access-а, для которого то проблем никаких нет. В этом смысле все корректно.

Утечки памяти возникнут при попытке обработки подобным способом (средствами ADO) открытых в Excel книг. В этом случае утечка образуется вот здесь (строка кода из приведенной ссылки):
Dim rst As New ADODB.Recordset

И даже Set rst = Nothing в конце кода не устраняет утечку памяти в этом случае (открытая книга в Excel + ADO).
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751918
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVIИнфо для советчиков обрабатывать Excel-данные с помощью СУДБ, в частности ADO
...


ZVI
Все это известно уже сто лет.
Вам контрвопрос.
А как вы собираетесь сортировать в массиве данные разных типов?
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751935
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня убивает, например, такой способ решения элементарной проблемы сортировки ,
как подключение сторонней DLL.
Тогда как в СУБД сортировка осуществляется или добавлением двух слов Order by в текст запроса, или включением нужного индекса.

Многие задачи средствами СУБД решаются на несколько порядков проще, чем Экселем.
Поэтому переход на СУБД почти всегда оправдан.

P.S.
Я никоим образом не против Excel!
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752175
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F ZVI
Все это известно уже сто лет.

То есть, Вы давно согласны, что СУБД не всегда приемлемо ;)

FВам контрвопрос.
А как вы собираетесь сортировать в массиве данные разных типов?

Ссылку (planetaexcel) на программную VBA-сортировку Слэн уже давал. Там есть вариант и для сортировки разных типов данных аналогично тому, как это делает Excel: данные не исчезают, а только сортируются.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752639
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё вариант, использую в Excel в модуле1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub proba()
    Dim massiv1( 10 ), massiv2()

    massiv1( 2 ) =  20 
    massiv1( 3 ) = "13"
    massiv1( 4 ) =  4 
    
    massiv2 = ArraySort(massiv1)

End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Function ArraySort( ARRAY_() )
    Dim Exchange As Boolean
    Dim x As Long
    Dim t
    
    Do
        Exchange = False
        For x = UBound(ARRAY_) To LBound(ARRAY_) +  1  Step - 1 
            If ARRAY_(x -  1 ) > ARRAY_(x) Then
                t = ARRAY_(x -  1 )
                ARRAY_(x -  1 ) = ARRAY_(x)
                ARRAY_(x) = t
                Exchange = True
            End If
        Next x
        For x = LBound(ARRAY_) +  1  To UBound(ARRAY_)
            If ARRAY_(x -  1 ) > ARRAY_(x) Then
                t = ARRAY_(x -  1 )
                ARRAY_(x -  1 ) = ARRAY_(x)
                ARRAY_(x) = t
                Exchange = True
            End If
        Next
    Loop While Exchange
    
    ArraySort = ARRAY_()
    
End Function
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752724
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это похоже на пузырька.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752745
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMepЭто похоже на пузырька.точно, один в один (не изобритать же велосипед)
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752780
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пузырек плохо на больших массивах.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752872
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVIТо есть, Вы давно согласны, что СУБД не всегда приемлемо
То, что вы имеете в виду, это и не СУБД, это запрос к таблице Excel, созданной не по правилам СУБД. Он и не должен работать.


ZVI
Ссылку (planetaexcel) на программную VBA-сортировку Слэн уже давал. Там есть вариант и для сортировки разных типов данных аналогично тому, как это делает Excel: данные не исчезают, а только сортируются.

Вот в этом частном случае я с вами согласен.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752901
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMepпузырек плохо на больших массивах.на очень больших не пробовал

В моём случае около 3-ёх тысяч элементов. Пока всё устраивает.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752922
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_,
Exchange = False из цикла хотя бы уберите
:)
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35752930
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_,

да и переприсваивать массив в конце незачем, он же по умолчанию по ссылке..
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35754576
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_не согласен с вами, ни с тем ни с другим предложением
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35754616
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на счёт второго предложения, всё-таки под вопросом
Код: plaintext
massiv2 = ArraySort(massiv1)
вы про эту строку говорите?
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35754985
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Do
Exchange = False

надо поменять на

Exchange = False
Do
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35755077
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_на счёт второго предложения, всё-таки под вопросом
Код: plaintext
massiv2 = ArraySort(massiv1)
вы про эту строку говорите?

Да , про эту.

с первой, согласен, я несколько поторопился :)


но вообще обратите внимание - там нашелся довольно быстрый алгоритм, особенно после модернизации его ZVI
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35755111
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее про эти две:

massiv2 = ArraySort(massiv1) - лучше просто ArraySort(massiv1)


ArraySort = ARRAY_() - вообще удалить


программа будет сортировать непосредственно во входящем массиве, если же его трогать не надо, то всегда можно переприсвоить, но пусть уж это будет на совести вызывающего
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35755281
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_точнее про эти две:

massiv2 = ArraySort(massiv1) - лучше просто ArraySort(massiv1)


ArraySort = ARRAY_() - вообще удалить


программа будет сортировать непосредственно во входящем массиве, если же его трогать не надо, то всегда можно переприсвоить, но пусть уж это будет на совести вызывающего
Код: plaintext
    ArraySort massiv1
да, так тоже работает, massiv1 становится отсортированным
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35755319
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_но вообще обратите внимание - там нашелся довольно быстрый алгоритм, особенно после модернизации его ZVIне дадите ссылочку, я никак не найду (пожалуйста)
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35761104
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Klen, вот ссылка http://www.planetaexcel.ru/forum.php?thread_id=7702

______________________________________________________________
Разрабатываю макросы под заказ.
Email: MacrosForYou собака yandex точка ru
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35761226
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот ссылка на файл: http://www.planetaexcel.ru/docs/forum_upload/post_44267.rar
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / а как сортировать массивы в VBA ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]