Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 11:10:03

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Полезные решения
| | |-+  "Умная" сортировка диапазонов строк
Страниц: [1]   Вниз
Печать
Автор Тема: "Умная" сортировка диапазонов строк  (Прочитано 23243 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« : 04.12.2015, 17:55:04 »

Всем привет!
Вчера наконец-то допилил функционал для своего макроса "умной" сортировки строк. Так как я не профессиональный программист, то макрос не блещет оригинальностью и оптимизацией. Однако функция Compare может многих заинтересовать. Она сравнивает строки таким образом, что после сортировки они (строки) имеют вид "более привычный" глазу.
Чтобы вызвать окно сортировки, нажмите: Ctrl + q (в английской раскладке)
Пользуйтесь на здоровье!
Конструктивная критика и предложения по улучшению приветствуются.
Спасибо.

P.S. Если будете сортировать очень большое количество строк, то имейте в виду, что зависимость времени от количества квадратичная (вложенные циклы)
Например, если сортировка 1000 строк занимает около минуты, то 2000 строк будут сортироваться около 4 минут и т.д.
3000 строк около 9 минут
5000 строк около 25 минут
10000 строк около 100 минут
« Последнее редактирование: 04.12.2015, 18:26:27 от Nessynapol » Записан
A-Michael
Старожил
****

Репутация: +16/-0
Офлайн Офлайн

Сообщений: 495



Просмотр профиля E-mail
« Ответ #1 : 06.12.2015, 09:23:07 »

Странно, идея хорошая, но, почему-то не работает. От слова "ВООБЩЕ". Нажимаю "Ctrl + q", появляется форма, но вся такая неактивная... Улыбка
Может из-за Excel 2007?
Записан

Я - не волшебник, я ещё только учусь...
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #2 : 06.12.2015, 11:24:06 »

почему-то не работает. От слова "ВООБЩЕ".
Нашел ошибку в функции Compare. Вместо переменной ii нужно было подставить ii1. Должны были сравниваться количества элементов массивов.
В этом фрагменте:
Код: (vb)
If (ii1 > ii2) Then
    Compare = True
    GoTo Exit_
ElseIf (ii1 = ii2) Then
    ' поблочное сравнение строк
    For i = 1 To ii1

Форма будет неактивна, если выбрать всего одну ячейку.
Спасибо за найденный баг.
Прикрепил исправленный файл.
« Последнее редактирование: 06.12.2015, 12:00:02 от Nessynapol » Записан
A-Michael
Старожил
****

Репутация: +16/-0
Офлайн Офлайн

Сообщений: 495



Просмотр профиля E-mail
« Ответ #3 : 06.12.2015, 12:00:56 »

Да, заработало, но честно говоря, не совсем понял в чём отличие данной программы от стандартной функции сортировки Excel. Кроме скорости работы...
Записан

Я - не волшебник, я ещё только учусь...
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #4 : 06.12.2015, 12:13:58 »

в чём отличие данной программы от стандартной функции сортировки Excel. Кроме скорости работы...
А Вы попробуйте отсортировать сложные строки стандартным сортировщиком и моим. Например:
строка1
строка2
строка10
строка11
строка100
И увидите разницу. Подмигивающий
Записан
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #5 : 06.12.2015, 18:28:50 »

Попробовал сортировать разнообразные строки. С разной длиной, набором и сочетанием букв, символов и цифр. Пришлось переделать логику функции сравнения Compare, так как результат был неожиданным. Теперь, вроде, правильно сортирует.
Исправленный файл прикрепил.
Записан
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #6 : 17.02.2016, 11:40:47 »

Сменил алгоритм сортировки на более оптимальный, оптимизировал функцию сравнения строк. Теперь сортировка происходит за вполне адекватное время (65000 строк за ~ 2,5 минуты, в зависимости от диапазона столбцов и мощности компьютера), только пришлось пожертвовать некоторыми свойствами ячеек. При обмене происходит перемещение только формулы (или значения ячейки), цвета заливки и цвета шрифта, остальное не трогается, но думаю для работы этого вполне достаточно.
Записан
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #7 : 22.02.2016, 13:28:38 »

1. Добавлена опция "Без учета регистра" для случаев, когда нужно чтобы слова с одинаковыми по смыслу буквами (прописными и заглавными) были рядом. Пример: "Строка, Тест, строка". с учетом регистра = "Строка, Тест, строка", без учета регистра = "Строка, строка, Тест".
2. Исправлен баг с переносом оттенков и цветов. Бесцветные ячейки при переносе в ранее закрашенные ячейки получали белую заливку.
Записан
Elizar
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #8 : 25.03.2016, 11:35:15 »

Например:
строка1подстрока90
строка2подстрока80
строка10подстрока01
строка11
строка100
Как ваш алгоритм отсортирует это? Есть настройка какая подстрока с числом будет главной при сортировке?
Записан
Nessynapol
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #9 : 16.10.2019, 21:22:24 »

Во вложении последняя версия сортировщика, но я уже давно забил на его разработку, пропал аппетит. Есть возможность создания бекапа для возврата в предыдущее состояние. Может кому-то пригодится.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru