Страницы: 1
RSS
Сортировка данных основанная на пользовательском списке (VBA)
 
Добрый день уважаемые форумчане, просьба в очередной раз помочь с одной задачкой

Есть лист данные, на котором представлен диапазон с кодами, который нужно отсортировать согласно заданного списка, представлен на листе список для сортировки

Как автоматизировать процесс сортировки данного диапазона при помощи VBA основанного на последовательности элементов, которая указана на листе список для сортировки? С учетом того что диапазон кодов на листе данные, не имеет определенных границ и постоянно меняется (строк может быть 100, а может быть 300)
Изменено: pinguindell - 17.12.2017 09:28:48
 
Макрос
Изменено: Karataev - 17.12.2017 09:52:20
 
Karataev, как обычно, молодец, для общего случая отличный вариант.

pinguindell, вопрос. Если ваш код разбить на (10 и 01 , 11 и 01) в этом конкретном случае вы сортируете сперва по второй части и потом по первой, или я что-то не заметил? Если так, то не потребуется ручное заполние пользовательского листа.  
Изменено: БМВ - 17.12.2017 09:59:37
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
для общего случая отличный вариант.
Почему "вариант"? И почему "отличный"? Автор темы указал именно про сортировку с пользовательским списком, а не просил сделать сортировку на основе данных из листа. Я сделал сортировку с использованием пользовательского списка штатными средствами Excel'я. Я ничего не изобретал, а воспользовался тем, что есть.
Изменено: Karataev - 17.12.2017 10:04:41
 
Karataev,  то не критика была, а наоборот,

А вот я не обратил внимание на то что порядок не совсем тот что сперва усмотрел не AB CD , а A и CD, сиртировка по A,  а потом CD . Но все равно , мне кажется проще определить правило сортировки, а не руками делать список, но это не относится к теме.
Изменено: БМВ - 17.12.2017 10:50:39
По вопросам из тем форума, личку не читаю.
 
БМВ, я понял, что Вы не критиковали, просто уточнил, что я не сделал ничего сверхъестественного, а просто использовал штатные средства Excel'я, поэтому не вижу смысла писать, что это "отличное" решение.
Хотя сейчас посмотрел внимательнее. Автор написал про "пользовательский список", а в Excel'е в сортировке это называется "Настраиваемый список". Я подумал, что автор темы имел ввиду именно "Настраиваемый список".
Возможно тогда Вы правы, что мое решение это "вариант".
Изменено: Karataev - 17.12.2017 10:50:00
 
Offtop
Цитата
Karataev написал:
просто использовал штатные средства Excel'я
Excel - набор штатных средств (в основном) , просто не каждый знает этот набор, и умеет его использовать.  :)  
По вопросам из тем форума, личку не читаю.
 
pinguindell,
1. сделайте на листе с данными доп. колонку
2. в ней формулу =ПОИСКПОЗ(Значение;СписокЗначений;)
3. можете ее скрыть и сортируйте таблицу по этой колонке с полученными индексами  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Karataev, Ігор Гончаренко,спасибо большое ! работает !

прошу прощение за поздний газ , но по ходу процесса возник еще один вопрос, если на листе данные, кроме кода есть к примеру еще другие данные, к примеру наименование (столбец С), дата (столбец D).

Как в этом случае сделать чтобы при сортировке данных сортировался не только код, но и все остальные данные. Сейчас получается что сортировка происходит только по столбцу В, а данные в столбцах C и D остаются на месте
 
Вместо этого
Код
.SetRange sh1.Columns("B")

используйте это:
Код
.SetRange sh1.Columns("B:D")
 
Цитата
pinguindell написал: Как в этом случае сделать
Как обычно - толково объясняем генеральную идею замысла и ожидаемый результат, и прилагаем соответствующий правилам (пп 2.2, 2.3) файл, а не вырванные и оторванные от реальной ситуации поля/диапазоны. Поэтому-то на данный момент ваша заморочка с сортировкой, имхо, смотрится совершенно НЕ целесообразной... ;)
Изменено: Z - 17.12.2017 17:40:19
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Z, полностью согласен с Вашей критикой, виноват, исправлюсь
Страницы: 1
Наверх