Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 18:43   #1
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
Вопрос Проблема с нестандартной сортировкой

Уже задавал вопрос относительно многомерных массивов в VBA и их сортировки. Сейчас пришел к тупику в выбранном пути - требуется что-то иное...

Может, подскажите, делается такая "хитрая" сортировка?

Имеется таблица. В колонке "B" указываются страны (сортируются по алфавиту), в "C" - уникальные числовые идентификаторы (ID) этих стран. В "D" - туристические объекты в этих странах (сорт. по алфавиту), соответственно, в "E" - ID страны, в которой расположен данный объект.
Объекты, не ссылающиеся на ID определенной страны (ID = 0), должны относиться к группе "ПРОЧИЕ" (ID = 999), т.е. находиться в самом конце таблицы.

В конечном итоге таблица должна выглядеть так:


Худо-бедно, соорудил макрос, который выполняет такую нестандартную сортировку. Для этого временно копирую значения ID стран из "E" в "C" и сортирую:
Код:
ws.Range(Cells(2, "A"), Cells(LastRow, "H")).SORT _
        Key1:=Range("C2"), Order1:=xlAscending, _
        Key2:=Range("B2"), Order2:=xlAscending, _
        Key3:=Range("D2"), Order3:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
затем удаляю из "C" временные данные.

Теперь, если добавляю новую страну, например "АЛБАНИЯ", присваиваю ей ID = 100 (произвольное значение - больше, чем последний используемый ID) и добавляю объекты в Албании: Тирана, Лежа и Дуррес. То, после сортировки Албания уходит в самый конец таблицы (после Швеции) и теряет последовательную связь со своими городами:


А нужно, чтобы Албания (со своими объектами) сортировалась по алфавиту (между Австрией и Бельгией):


Никак не могу понять, как же выполнить требуемую сортировку...

Заранее благодарю за советы!
Вложения
Тип файла: zip tours_test_06-2.zip (22.6 Кб, 13 просмотров)
Depressive вне форума Ответить с цитированием
Старый 15.05.2011, 20:31   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Depressive Посмотреть сообщение
Уже задавал вопрос относительно многомерных массивов в VBA и их сортировки. Сейчас пришел к тупику в выбранном пути - требуется что-то иное...

Может, подскажите, делается такая "хитрая" сортировка?

Имеется таблица. В колонке "B" указываются страны (сортируются по алфавиту), в "C" - уникальные числовые идентификаторы (ID) этих стран. В "D" - туристические объекты в этих странах (сорт. по алфавиту), соответственно, в "E" - ID страны, в которой расположен данный объект.
Объекты, не ссылающиеся на ID определенной страны (ID = 0), должны относиться к группе "ПРОЧИЕ" (ID = 999), т.е. находиться в самом конце таблицы.

В конечном итоге таблица должна выглядеть так:


Худо-бедно, соорудил макрос, который выполняет такую нестандартную сортировку. Для этого временно копирую значения ID стран из "E" в "C" и сортирую:
Код:
ws.Range(Cells(2, "A"), Cells(LastRow, "H")).SORT _
        Key1:=Range("C2"), Order1:=xlAscending, _
        Key2:=Range("B2"), Order2:=xlAscending, _
        Key3:=Range("D2"), Order3:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
затем удаляю из "C" временные данные.

Теперь, если добавляю новую страну, например "АЛБАНИЯ", присваиваю ей ID = 100 (произвольное значение - больше, чем последний используемый ID) и добавляю объекты в Албании: Тирана, Лежа и Дуррес. То, после сортировки Албания уходит в самый конец таблицы (после Швеции) и теряет последовательную связь со своими городами:


А нужно, чтобы Албания (со своими объектами) сортировалась по алфавиту (между Австрией и Бельгией):


Никак не могу понять, как же выполнить требуемую сортировку...

Заранее благодарю за советы!
не знаю для чего это Вам, но сводная таблица похоже Вам подойдет,
на один лист вносите, сводной получаете нужный результат
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 15.05.2011, 20:38   #3
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
не знаю для чего это Вам, но сводная таблица похоже Вам подойдет...
Ага, только пустые строки забить значениями. Но это скучно Лучше ведь поломать голову с макросами, наверное?
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 16.05.2011, 13:13   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

По совету Сергея поломал голову с макросами
Кнопка Sights сортирует объекты внутри страны, кнопка Countries сортирует страны.
Вложения
Тип файла: zip tours_test_06-2.zip (32.4 Кб, 14 просмотров)
nilem вне форума Ответить с цитированием
Старый 19.05.2011, 16:13   #5
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

R Dmitry, спасибо, но я честно не понял, как в данном случае можно использовать сводную таблицу для моего случая сортировки.
Если не трудно, объясните.

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
не знаю для чего это Вам, но сводная таблица похоже Вам подойдет,
на один лист вносите, сводной получаете нужный результат
Depressive вне форума Ответить с цитированием
Старый 19.05.2011, 18:56   #6
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Nilem, спасибо! Любопытный у Вас код!
Он почти работает... Если какому-либо объекту присваиваем ссылку на страну, сортировка не срабатывает. Например, если городу БАЛЧИК указать, что находится в Болгарии, т.е. поставить "4" в ячейке E346, то она все равно останется в группе "прочие", а не переместиться в 4-ю группу.
Если "скрестить" мою сортировку с Вашей, то вроде бы получается что-то путное

Цитата:
Сообщение от nilem Посмотреть сообщение
По совету Сергея поломал голову с макросами
Кнопка Sights сортирует объекты внутри страны, кнопка Countries сортирует страны.
Depressive вне форума Ответить с цитированием
Старый 19.05.2011, 22:49   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Depressive Посмотреть сообщение
Например, если городу БАЛЧИК указать, что находится в Болгарии, т.е. поставить "4" в ячейке E346, то она все равно останется в группе "прочие", а не переместиться в 4-ю группу...
Тогда так, см. файл.
Два последних цикла надо бы объединить - не придумалось
Вложения
Тип файла: zip tours_test_06-3.zip (37.1 Кб, 14 просмотров)
nilem вне форума Ответить с цитированием
Старый 19.05.2011, 23:34   #8
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Depressive Посмотреть сообщение
R Dmitry, спасибо, но я честно не понял, как в данном случае можно использовать сводную таблицу для моего случая сортировки.
Если не трудно, объясните.
я не поленился и заполнил исходник., смотрите результат сводной
Вложения
Тип файла: zip pivot.zip (57.0 Кб, 15 просмотров)
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 21.05.2011, 15:11   #9
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
я не поленился и заполнил исходник., смотрите результат сводной
Уважаемый R Dmitry, спасибо, идея понятна, но это не совсем то, что требуется.
Надо просто переставить строки в текущей таблице так, чтобы они последовательно сортировались по странам, а внутри страны - по туристическим объектам, и делалось бы это просто одной кнопкой, без всяких дополнительных таблиц...
Depressive вне форума Ответить с цитированием
Старый 21.05.2011, 15:14   #10
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
Тогда так, см. файл.
Два последних цикла надо бы объединить - не придумалось
Nilem, огромное спасибо!
Похоже, что все отлично работает! Буду мучить Ваш код дальше
Depressive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с сортировкой Anubys Помощь студентам 0 19.04.2011 17:10
проблема с сортировкой вставками Brabus Помощь студентам 4 27.06.2010 12:27
Алгоритм "нестандартной" сортировки масива Scorpil Общие вопросы C/C++ 3 14.11.2008 21:29
отсечение области окна нестандартной формы Makcydrl Win Api 3 07.05.2008 01:36
Помогите с сортировкой AHTOXA Общие вопросы Delphi 2 08.06.2007 12:46