powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / а как сортировать массивы в VBA ?
47 сообщений из 47, показаны все 2 страниц
а как сортировать массивы в VBA ?
    #35748414
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот собственно и весь вопрос..

ps наиболее быстро хочется..
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748684
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_вот собственно и весь вопрос..

ps наиболее быстро хочется..

Так - же, как и в любом другом языке.
Алгоритм сортировки и скорость оного зависят от того, что сортируем.
Если сортировать массив из 10 чисел - тут и пузырьком пойдет.
Если массив большой, но диапазон не велик - сортировка подсчетом.
И так далее.
Основные алгоритмы именно в VB реализации - есть в книге Гетса\Джилберта - Программирование VB\VBA - как то так, точно название не помню.
Тут на сайте, в книгах, есть.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748700
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кинуть массив на лист и там отсортировать функцией экселя. Затем закинуть отсортированный диапазон обратно в массив.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748708
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikКинуть массив на лист и там отсортировать функцией экселя. Затем закинуть отсортированный диапазон обратно в массив.

Как насчет массива из 500 000 элементов, например?
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748714
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В СУБД решается за секунду.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748717
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerA-NikКинуть массив на лист и там отсортировать функцией экселя. Затем закинуть отсортированный диапазон обратно в массив.
Как насчет массива из 500 000 элементов, например?
использовать Офис 2007
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35748723
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749204
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749207
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamer,
самому писать - эт понятно тогда, но эт же велосипед.. неужели ничего встроенного/готового нет?
мож с dll..
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749231
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_SQL_Lamer,
самому писать - эт понятно тогда, но эт же велосипед.. неужели ничего встроенного/готового нет?
мож с dll..

Прикольно :)
Пошел на сайт мелкософт, что там про сортировки в VBA говорят, а там ту - же книжку советуют, что и я :))
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749241
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikSQL_LamerA-NikКинуть массив на лист и там отсортировать функцией экселя. Затем закинуть отсортированный диапазон обратно в массив.
Как насчет массива из 500 000 элементов, например?
использовать Офис 2007


А если это не excel, а word, или outlook? :))
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749434
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый быстрый способ (применительно к большим наборам данных в Офисе) - выгрузить данные в файл, отсортировать его с помощью сторонней утилиты (лучше всего писаной на си или асме) и закачать обратно...
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749610
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerA-NikSQL_LamerA-NikКинуть массив на лист и там отсортировать функцией экселя. Затем закинуть отсортированный диапазон обратно в массив.
Как насчет массива из 500 000 элементов, например?
использовать Офис 2007

А если это не excel, а word, или outlook? :))Ой сомневаюсь я, что кто-либо столкнётся с задачей сортировки 500 000 записей в ворде или аутлуке
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749788
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMСамый быстрый способ (применительно к большим наборам данных в Офисе) - выгрузить данные в файл, отсортировать его с помощью сторонней утилиты (лучше всего писаной на си или асме) и закачать обратно...

Выгружать куда - то данные, потом обратно... Только, чтоб отсортировать?
Что за чепуха?
Есть же в VBA возможность написать любую сортировку.
VBA - вполне функцинальный инструмент для таких вещей.
Если уж хочется использовать сторонние инструменты - можете reference на dll свою сделать.
Только dll ваша должна иметь строгое имя и должна быть зарегана в гасе.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35749907
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удивляюсь, для чего люди СУБД придумывали?
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750110
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F,
ну вот вы субд субд.. т.е. вы мне предлагаете к оффису еще и СУБД прикупить?

да у меня и базы-то нет..
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750324
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найдите в википедии алгоритм сортировки, реализуйте его на VBA и пользуйтесь им .
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750462
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_F,
ну вот вы субд субд.. т.е. вы мне предлагаете к оффису еще и СУБД прикупить?

да у меня и базы-то нет..

Надо задачи решать правильными средствами. СУБД есть бесплатные. И что-то мне подсказывает, что если у вас есть оффис, то там есть и Access.
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750741
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750743
Лучше
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35750965
тынц
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751348
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-duke,
уже нашли.. немножко доработали.
http://www.planetaexcel.ru/forum.php?thread_id=7702
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751356
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_, вариант с рекордсетом я тоже нашел, но заставить работать пока не смог..
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751360
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F,
фигню вы говорите..

зачем мне переходить в другую среду.. ни вообще, ни в частности не понимаю.

больше с вами не разговариваю
...
Рейтинг: 0 / 0
а как сортировать массивы в VBA ?
    #35751732
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инфо для советчиков обрабатывать Excel-данные с помощью СУДБ, в частности ADO :

1. Обработка открытых Excel-книг приводит к утечкам памяти, мною это проверено, а кто не верит читайте здесь:
BUG Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects
Такая проблема относится и к оекомендованной здесь ссылке на
Сортировка двухмерного массива с помощью ADO рекордсета
Сохранять книгу для того, чтобы обработать, а затем открывать? Это - тормоз :)

2. Если в столбце(колонке) Excel-книги данные смешанных типов, то импортируются только данные одного их этих типов, а данные остальных типов игнорируются. Обычно определение типа данных производится по первым 8-ми строкам колонки (зависит от параметра в реестре, может быть от 1 до 16 или по всей колонке, но импортируются все равно данные только одного типа)
Другими словами, совет обработать с помощью СУБД - тупиковый. Или предложите импортировать в MEMO-поля Access-a, там обрабатывать и возвращать в Excel? Ну, это совет для врагов разве что :)
...
Рейтинг: 0 / 0
а как сортировать массивы в 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
47 сообщений из 47, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / а как сортировать массивы в VBA ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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