Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 13
1

Неправильная сортировка при использовании метода .sort

25.03.2012, 13:42. Просмотров 4612. Ответов 5
Метки нет (Все метки)

Суть проблемы:

Есть таблица в Excel'e которую надо отсортировать по столбцу
велосипед решил не придумывать, использовал метод .sort
Visual Basic
1
Worksheets("Work").Range("A:G").Sort Key1:=Worksheets("Work").Range("G1")
но вот беда при использовании метода .sort на данные вида
%i123
%i90
%i124

получается:
%i123
%i124
%i90

а хотелось бы видеть:
%i90
%i123
%i124
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2012, 13:42
Ответы с готовыми решениями:

ошибка при использовании метода Sort - 448
В чем причина ошибки в коде? ActiveSheet.ListObjects("Таблица_Договоры_бд").Sort...

Неправильная сортировка списка list.Sort();
Неправильная сортировка списка list.Sort(); Входные данные a1|+74951234567 A1|+78885005500...

Неправильная передача строк в шаблон при использовании Django
Столкнулся с такой проблемой: Использую Django, собираю список из данных таблицы TblRoads 1....

Ошибка при использовании метода Fill
При попытке использовать fill - вылетает ошибка an unhandled exception of type...

5
Заблокирован
25.03.2012, 14:06 2
Абсолютно правильная сортировка строк
%i123
%i124
%i90
т.к. "9" > "1".
Самый простой выход - форматировать записи с окончанием < 100 таким образом -
%i005
%i090
1
14942 / 6341 / 1724
Регистрация: 24.09.2011
Сообщений: 9,976
25.03.2012, 15:10 3
Можно в соседнем столбце выделить числа формулой, отсортировать по нему и удалить:
Visual Basic
1
2
3
4
5
6
7
Sub bb()
With Range("G1", Cells(Rows.Count, "G").End(xlUp)).Offset(, 1)
    .FormulaR1C1 = "=--MID(RC[-1],3,99)"
    Range("A:H").Sort Key1:=[H1], header:=xlNo
    .Delete
End With
End Sub
1
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 13
25.03.2012, 15:58  [ТС] 4
Здесь проблема в том, что не <100, а <10000. Требуется разбить гигантские таблицы с данными на более мелкие и параллельно отсортировать их. В итоге проверка каждой ячейки на длинну и добавление нужного колличества нулей будет очень тормозить процесс. И хотя, на крайний случай, оба решения подходят, все таки интересно, есть ли способ используя опции метода или даже настройки самой системы, региональных параметров, например, объяснить методу, что 100>99?
0
14942 / 6341 / 1724
Регистрация: 24.09.2011
Сообщений: 9,976
25.03.2012, 16:24 5
Цитата Сообщение от dtr315 Посмотреть сообщение
проверка каждой ячейки на длинну и добавление нужного колличества нулей будет очень тормозить процесс.
При ~10000 строках основное время в любом случае займет сортировка.
Цитата Сообщение от dtr315 Посмотреть сообщение
есть ли способ ... объяснить методу, что 100>99?
Вы же, наверно, изучили диалог сортировки и попробовали разные параметры?
В принципе можно создать пользовательский список из строк
"%i1", "%i2", ..., "%i9", "%i10", ..., "%i99", "%i100", ..., "%i9999", "%i10000"
и сортировать по нему. Но я не уверен, что можно создать такой длинный пользовательский список. А в том, что сортировка по пользовательскому списку медленнее, чем по стандартному возрастанию/убыванию - уверен
0
Эксперт WindowsАвтор FAQ
17589 / 7432 / 884
Регистрация: 25.12.2011
Сообщений: 11,227
Записей в блоге: 16
25.03.2012, 19:18 6
Почитал иностранные форумы тыц и тыц.
Но везде пишут о разделении данных.

На сколько будет медленно, если воспользоваться тем же алгоритмом Qsort, задав в качестве входящего параметра MID(Arr(a),3), загнав в массив все данные?
Может что возможно сделать с помощью регулярных выражений.

Казанский, а можно подробней об этом способе? (и как задается ключ)
Я так понимаю в несколько строк загоняем значения в нужном нам порядке и это будет правилом для .Sort key:=Range(...), в каком конце окажутся данные не подпадающие под правило.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2012, 19:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка при использовании метода Copytodatabase.
Имеем базу в формате ods41 (Lotus R5). База работает под Lotus R5, R6, R7. База локальная и играет...

Ошибка при использовании метода хорд
// chord method.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot;...

Странная ошибка при использовании метода erase
И снова здравствуйте. Уже несколько дней пытаюсь решить эту проблему. При шифровке файла, моё...

Вылет Excel при использовании метода Intersect
Коллеги, приветствую! При использовании метода Intersect в VBA для отслеживания изменения ячейки...

Партнёрская программа при использовании метода оплаты
есть страничка скажем http://сайт/лала.php?id1 с нее производится оплата человек проходит через...

Теряются данные при использовании метода post, get
Есть такая форма ввода: &lt;section class=&quot;loginform cf&quot;&gt; &lt;form name=&quot;login&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.