Здравствуйте! Прошу помощи по сортировке на листе! Суть: нужно отсортировать блоки (см.файл) по категориям по нажатию кнопки "сортировка" Голубая строка - категория, принадлежность блока к категории в столбце "А" - с-старые, н-новые.... Если в блоке поменять "С" на "Н" и нажать кнопку "сортировка", то этот блок должен переместиться из категории "старые" в категорию "новые". Количество блоков может изменяться. уже голова раскалывается от идей, но никак не могу придумать, и похожего не нахожу по форумам...
если есть время и желание - помогите!
Заранее благодарю всех откликнувшихся!
Здравствуйте! Прошу помощи по сортировке на листе! Суть: нужно отсортировать блоки (см.файл) по категориям по нажатию кнопки "сортировка" Голубая строка - категория, принадлежность блока к категории в столбце "А" - с-старые, н-новые.... Если в блоке поменять "С" на "Н" и нажать кнопку "сортировка", то этот блок должен переместиться из категории "старые" в категорию "новые". Количество блоков может изменяться. уже голова раскалывается от идей, но никак не могу придумать, и похожего не нахожу по форумам...
Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)
Я просто убрал все что делал, чтоб не путать своими идеями откликнувшихся. Были идеи со сдвигом всего диапазона вниз, а потом по условию вставлять строки назад в нужные места, вторая идея - практически то же но с копированием на другой лист... но это все громоздко и медленно работает.
Теперь есть мысль (описанная в посте) - но не знаю как реализовать (так как в ВБА я , можно сказать лузер) Логика я думаю такая - если строка содержит значение "Новые" то блок(диапазон), в котором в столбце "А"(объедененная ячейка) есть значение "н" вставить под строкой "Новые"... и так дальше
если логика правильная, то моя проблема заключается в написании этой логики на ВБА, при чем адреса блоков и категорий при сортировке меняются.
п.с. я понимаю и читал форум - НИКТО ЗА ВАС РАБОТУ ДЕЛАТЬ НЕ БУДЕТ... но так как я пытаюсь научиться ВБА и понять что-как работает, то и прошу это сделать за меня(с комментариями в коде), дабы в будущем не беспокоить ЗНАЮЩИХ И УМЕЮЩИХ ЛЮДЕЙ!
Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)
Я просто убрал все что делал, чтоб не путать своими идеями откликнувшихся. Были идеи со сдвигом всего диапазона вниз, а потом по условию вставлять строки назад в нужные места, вторая идея - практически то же но с копированием на другой лист... но это все громоздко и медленно работает.
Теперь есть мысль (описанная в посте) - но не знаю как реализовать (так как в ВБА я , можно сказать лузер) Логика я думаю такая - если строка содержит значение "Новые" то блок(диапазон), в котором в столбце "А"(объедененная ячейка) есть значение "н" вставить под строкой "Новые"... и так дальше
если логика правильная, то моя проблема заключается в написании этой логики на ВБА, при чем адреса блоков и категорий при сортировке меняются.
п.с. я понимаю и читал форум - НИКТО ЗА ВАС РАБОТУ ДЕЛАТЬ НЕ БУДЕТ... но так как я пытаюсь научиться ВБА и понять что-как работает, то и прошу это сделать за меня(с комментариями в коде), дабы в будущем не беспокоить ЗНАЮЩИХ И УМЕЮЩИХ ЛЮДЕЙ!urlchik
Пишем макрорекордером 3 макроса, и превращаем их в нужный [vba]
Код
Sub Макрос2() Selection.Find(What:="Стар", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate End Sub Sub Макрос3() Selection.Find(What:="Нов", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate End Sub Sub Макрос4() Selection.Cut Range("A25").Select Selection.Insert Shift:=xlDown End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub firstRow = Columns("C").Find(What:="Стар", LookIn:=xlFormulas, LookAt:=xlPart).Row lastRow = Columns("C").Find(What:="Нов", LookIn:=xlFormulas, LookAt:=xlPart).Row If Not Intersect(Target, Range("A" & firstRow & ":A" & lastRow)) Is Nothing Then Target.Resize(2, 10).Cut Cells(Rows.Count, "A").End(xlUp).Offset(1).Insert End If End Sub
[/vba]
Пишем макрорекордером 3 макроса, и превращаем их в нужный [vba]
Код
Sub Макрос2() Selection.Find(What:="Стар", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate End Sub Sub Макрос3() Selection.Find(What:="Нов", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate End Sub Sub Макрос4() Selection.Cut Range("A25").Select Selection.Insert Shift:=xlDown End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub firstRow = Columns("C").Find(What:="Стар", LookIn:=xlFormulas, LookAt:=xlPart).Row lastRow = Columns("C").Find(What:="Нов", LookIn:=xlFormulas, LookAt:=xlPart).Row If Not Intersect(Target, Range("A" & firstRow & ":A" & lastRow)) Is Nothing Then Target.Resize(2, 10).Cut Cells(Rows.Count, "A").End(xlUp).Offset(1).Insert End If End Sub
urlchik, Excel - Электронные таблицы Таблица - по умолчанию несет информацию в каждой строке(даже если строка пустая) Здесь ваша первая ошибка, т.к. у вас данные по одной записи разбиты на две строки, а ячейка с ключом для сортировки только одна, но вы ее объединили со смежной ячейкой и решили, что она размножается(это вторая ошибка) Если исправить предыдущие ошибки, то можете использовать встроенный инструмент "Промежуточные итоги"(см.вложение)
Убрали итоги - отсортировали - добавили итоги и т.д..
А то, что вы пытаетесь сделать это упорядочивание отдельных таблиц размером более чем в 1 строку по какому-то одному полю из этой таблицы...
urlchik, Excel - Электронные таблицы Таблица - по умолчанию несет информацию в каждой строке(даже если строка пустая) Здесь ваша первая ошибка, т.к. у вас данные по одной записи разбиты на две строки, а ячейка с ключом для сортировки только одна, но вы ее объединили со смежной ячейкой и решили, что она размножается(это вторая ошибка) Если исправить предыдущие ошибки, то можете использовать встроенный инструмент "Промежуточные итоги"(см.вложение)
Убрали итоги - отсортировали - добавили итоги и т.д..
А то, что вы пытаетесь сделать это упорядочивание отдельных таблиц размером более чем в 1 строку по какому-то одному полю из этой таблицы...boa