|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.03.2009, 20:27 | #1 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 18
|
Сортировать иерархический список строк с пустыми ячейками
Подскажите, пожалуйста, как отсортировать иерархический (древовидный) список строк с пустыми ячейками (сначала по первому столбцу, потом по второму и т.д.).
В приведенном примере сортировать нужно только по столбцам A, B и C, но их может быть от 1 до 6. Пустые ячейки нужно сохранить - т.е. их конечно можно для правильной сортировки заполнить чем-то, но потом надо снова очистить. Знания VBA к сожалению минимальны. Код:
|
28.03.2009, 23:45 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Заполнить ячейки, в принципе, не проблема, очистить их потом - тоже. Прикрепите файл. Объясните, как должна осуществляться сортировка: 1 вариант: на листе 2 кнопки - заполнить и очистить. Вы нажимаете кнопку Заполнить, потом вручную сортируете как надо, после чего нажимаете Очистить 2 вариант: на листе одна кнопка - сортировать, при нажатии на которую макрос заполняет пустые поля, сортирует заранее определённым способом, и очищает нужные ячейки. |
|
30.03.2009, 15:19 | #3 | ||
Пользователь
Регистрация: 28.03.2009
Сообщений: 18
|
Цитата:
Цитата:
А может вариант 2 все-таки лучше: указал в самом макросе сортировка прямая или обратная, задал по каким столбцам сортировать, вернулся в Excel, выделил нужный диапазон строк, нажал всего одну кнопку и готово... Но лучше было бы, чтоб и столбцы, по каким сортировать, можно было указывать из Excel, а не Бейсика... Внимание: при заполнении пустых ячеек вручную данными из вышестоящей ячейки и стандартной сортировке (меню Данные -> Сортировка -> по возрастанию), первая строка каждой группы у меня почему-то становится последней в этой группе, что неприемлемо. Последний раз редактировалось domo22; 30.03.2009 в 15:43. |
||
30.03.2009, 16:50 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Может, как-то так?
Нажмите сначала зелёную, а потом желтую кнопочку:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 30.03.2009 в 16:58. |
30.03.2009, 19:29 | #5 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 18
|
Боже мой, программа не только правильно сортирует, она еще и элегантно оформлена! Ну это же надо! Спасибо огромное.
Но все-таки есть несколько вопросов: 1. Пожалуйста, опишите какие действия происходят при нажатии на Зеленую, Желтую и Красную кнопки. Хоть и мало знаний, но все-таки очень интересно. 2. Если галочка "Отображать пустые ячейки" снята, то можно ли чтобы программа в этом случае сохраняла исходное форматирование строк? Или даже в любом случае сохраняла? А то строки и ячейки часто раскрашены в разные цвета и все пропадает. Это возможно подправить? 3. Можно расширить помощь при нажатии на Желтую кнопку? Сейчас "Выполните сортировку через меню Excel", а сделать типа "Выделите нужный диапазон строк, а затем выполните сортировку через меню Excel. Сортировка возможна максимум по ... столбцам". 4. Длину всех трех кнопок сделать где-то на четверть меньше, они чуть длинноваты и иногда приходится тянуть ползунок, что часто неудобно. |
31.03.2009, 05:17 | #6 | |||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Там 3 макроса: Sub ЗаполнитьПустыеЯчейки() Sub Очистка() Sub Сортировка() Цитата:
Раскраска ячеек (фон, шрифт, и полужирное начертание) реализована исключительно для наглядности. Цитата:
Цитата:
MsgBox "Выполните сортировку через меню Excel" Текст можно поставить любой. Цитата:
Выделите кнопку, удерживая клавишу Ctrl, и измените её размер (или перетащите на нужное место). |
|||||
31.03.2009, 16:15 | #7 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 18
|
Еще раз спасибо, теперь уже за профессионально быстрый ответ и пояснения. Однако, если у Вас еще сохранились возможность и желание отвечать мне, все-таки несколько вопросов:
1. Прошу посмотреть исправленный код и внести правку, если нужно. База-пример-3.zip 2. Правильно ли я понимаю, что сортировка строк возможна только если они находятся начиная с 3-й строки и расположены в 6-ти столбцах и идет она по 4-м столбцам? А иначе надо менять код? Или нет? 3. Из-за слабых знаний Бейсика мне не удалось сделать сортировку по убыванию. Можете помочь и добавить второй ряд кнопок для сортировки по убыванию? |
01.04.2009, 03:37 | #8 |
Пользователь
Регистрация: 23.03.2009
Сообщений: 14
|
Извините, не туда залил.
Последний раз редактировалось ing60; 01.04.2009 в 04:09. Причина: Извините, не туда залил. |
05.04.2009, 11:36 | #9 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Вот только в связи с особенностями структуры исходных данных придётся задавать сортировку по всем столбцам, начиная с первого, и заканчивая последним столбцом, требующим сортировки. К примеру, надо отсортировать таблицу по 4-му столбцу (в данном случае неважно, по возрастанию или по убыванию). Для этого мы во избежание перемешивания строк вынуждены задать сортировку не только по 4-му столбцу, а по всем столбцам, начиная с первого, и заканчивая 4-м. И всё бы хорошо, но у меня не установлен Excel 2007... а 2003-я версия не позволяет задать более 3 уровней сортировки: Цитата:
В общем случае решение может выглядеть так: 1) Во второй (пустой) строке листа пользователь для каждого столбца (или только для некоторых столбцов) выбирает режим сортировки (неважно, как именно - при помощи флажков, или выпадающего списка в ячейке) - по убыванию или по возрастанию 2) Уже после этого выбора пользователь нажимает зелёную кнопку для заполнения таблицы (пустые ячейки в каждом столбце теперь заполняются значениями "1" или "яяя" - в зависимости от режима сортировки в текущем столбце) 3) Нажимать желтую кнопочку для сортировки нет необходимости - поскольку критерии сортировки указаны, она будет выполнена автоматически. Но, повторюсь, Excel 2007 у меня не установлен, поэтому реализовать и проверить макрос я не могу. Ну а то, что строго заданы диапазоны ячеек: Код:
Макрос легко может определить границы таблицы (если Вы укажете критерии), и, соответственно, осуществлять обработку нужного диапазона. |
||
05.04.2009, 13:37 | #10 | ||||
Пользователь
Регистрация: 28.03.2009
Сообщений: 18
|
Спасибо за пояснения, хотя мне еще не все понятно.
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с объединенными ячейками | tae1980 | Microsoft Office Excel | 6 | 13.02.2009 22:25 |
delphi и excel работа с ячейками | Doget | Помощь студентам | 1 | 04.08.2008 08:13 |
Сформировать список строк L1, считав его из файла input.txt | Gaika | Помощь студентам | 4 | 03.07.2008 07:33 |
Как сортировать список TListView по определённому столбцу? | Никки | Общие вопросы Delphi | 1 | 18.12.2007 19:18 |
Надо в RichEdit Удалить все строки между двумя пустыми | Stas))) | Компоненты Delphi | 7 | 28.05.2007 16:49 |