Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка одномерного цифрового массива

21K
11 октября 2007 года
lakuster
24 / / 04.10.2007
Когда я работала в VB, то там существовала функция:
Array.Sort(Имя_массива)
Существуют ли в VBA подобные методы сортировки?
251
11 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Array.Sort не входит в стандартные библиотеки бейсика. Или были подключены дополнительные модули, или вы перепутали что-то. В VBA тоже такого нет
21K
11 октября 2007 года
lakuster
24 / / 04.10.2007
Цитата: SkyM@n
Array.Sort не входит в стандартные библиотеки бейсика. Или были подключены дополнительные модули, или вы перепутали что-то. В VBA тоже такого нет



Это не совсем так. Я говорила про VB.NET? а не про VB 6!
И работала я в Visual Studio 2005. Так там эта конструкция есть. Неужели же в VBA нет стандартных методов сортировки?
Пожалуйста, ответьте, если знаете.

251
11 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: lakuster
Неужели же в VBA нет стандартных методов сортировки?
Пожалуйста, ответьте, если знаете.


К сожалению, нет. Может вам подойдет перебором в цикле? Или может еще проще? Какая задача стоит?

21K
12 октября 2007 года
lakuster
24 / / 04.10.2007
Спасибо. Придётся писать самой программу сортировки. Я пробовала подключать DLL, написанные в VS на C# и на VB.Net, но почему-то VBA эти ссылки не принимает! Я нашла в Интернете сообщение, что всё это будет работать в Microsoft Office 2007, но пока у нас стоит 2003.
А задача такая, что нужна быстрая сортировка множества одномерных цифровых массивов - номеров некоторых ссылок. Вот и всё.
Извините за настырность, но в Visual Basic есть и такой оператор :
Имя_массива.Sort(...). Жаль, что в VBA нет подобного. Правда в WORD есть оператор Sort, например, для сортировки абзацев или ещё каких-то текстов. Как его приспособить к моей задаче я не знаю.
251
12 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: lakuster
Sort(...). Жаль, что в VBA нет подобного. Правда в WORD есть оператор Sort, например, для сортировки абзацев или ещё каких-то текстов. Как его приспособить к моей задаче я не знаю.


Можно, конечно сочинить самому невидимую таблицу и там сортить., но имхо самому лучше написать процедуру сортировки эллементов, так как это менее гемморойней, быстрее, удобнее, надежнее.

21K
12 октября 2007 года
lakuster
24 / / 04.10.2007
Спасибо, так и сделаю!
251
12 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: lakuster
Спасибо, так и сделаю!


Да не за что! :)

248
17 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
Можно, конечно сочинить самому невидимую таблицу и там сортить., но имхо самому лучше написать процедуру сортировки элементов, так как это менее гемморойней, быстрее, удобнее, надежнее.



Да можно без таблицы. Все оч. просто.
В пустой документ вставить текст, которые надо сортировать и:
Selection.Sort SortOrder:=wdSortOrderAscending
или
Selection.Sort SortOrder:=wdSortOrderDescending
ВСЕ!!!
Проверил на однострочных абзацах (было примерно 700 строк) - работает как часы и весьма быстро (меньше секунды).

251
18 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: Dmitry2064
Да можно без таблицы. Все оч. просто.
В пустой документ вставить текст, которые надо сортировать и:
Selection.Sort SortOrder:=wdSortOrderAscending
или
Selection.Sort SortOrder:=wdSortOrderDescending
ВСЕ!!!
Проверил на однострочных абзацах (было примерно 700 строк) - работает как часы и весьма быстро (меньше секунды).


Автор интересуется сортировкой массива, а не выделения в документе.

21K
18 октября 2007 года
lakuster
24 / / 04.10.2007
Цитата: Dmitry2064
Да можно без таблицы. Все оч. просто.
В пустой документ вставить текст, которые надо сортировать и:
Selection.Sort SortOrder:=wdSortOrderAscending
или
Selection.Sort SortOrder:=wdSortOrderDescending
ВСЕ!!!
Проверил на однострочных абзацах (было примерно 700 строк) - работает как часы и весьма быстро (меньше секунды).



Ну, это совсем как чесать левое ухо правой ногой. Мне же нужно сортировать массив, без всякой привязки к документу! С таким же успехом я могла обратиться к Excel и сортировать там.
Кстати, я уже написала программу сортировки, спасибо за подсказки.

248
18 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Так массив-то одномерный. Наверное сначала можно отсортировать в Ворде, а потом поместить это в массив. (Хотя могу чего-то не понимать).
31K
18 октября 2007 года
kdss
9 / / 08.10.2007
Может пригодится кому. Сортировка методом Шелла.
-----------------------------------------------------
Public Sub ShellSort(vArray As Variant)
Dim TempVal As Variant
Dim i As Long, GapSize As Long, CurPos As Long
Dim FirstRow As Long, LastRow As Long, NumRows As Long
FirstRow = LBound(vArray)
LastRow = UBound(vArray)
NumRows = LastRow - FirstRow + 1
Do
GapSize = GapSize * 3 + 1
Loop Until GapSize > NumRows
Do
GapSize = GapSize \ 3
For i = (GapSize + FirstRow) To LastRow
CurPos = i
TempVal = vArray(i)
Do While CompareResult(vArray(CurPos - GapSize), TempVal)
vArray(CurPos) = vArray(CurPos - GapSize)
CurPos = CurPos - GapSize
If (CurPos - GapSize) < FirstRow Then Exit Do
Loop
vArray(CurPos) = TempVal
Next
Loop Until GapSize = 1
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог