Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сложная сортировка на листе по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сложная сортировка на листе по условию (Макросы/Sub)
Сложная сортировка на листе по условию
urlchik Дата: Понедельник, 05.11.2018, 16:44 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте! Прошу помощи по сортировке на листе! Суть:
нужно отсортировать блоки (см.файл) по категориям по нажатию кнопки "сортировка" Голубая строка - категория, принадлежность блока к категории в столбце "А" - с-старые, н-новые.... Если в блоке поменять "С" на "Н" и нажать кнопку "сортировка", то этот блок должен переместиться из категории "старые" в категорию "новые". Количество блоков может изменяться.
уже голова раскалывается от идей, но никак не могу придумать, и похожего не нахожу по форумам...

если есть время и желание - помогите!

Заранее благодарю всех откликнувшихся!
К сообщению приложен файл: 8352958.xlsm (33.3 Kb)


Век живи - век учись!
 
Ответить
СообщениеЗдравствуйте! Прошу помощи по сортировке на листе! Суть:
нужно отсортировать блоки (см.файл) по категориям по нажатию кнопки "сортировка" Голубая строка - категория, принадлежность блока к категории в столбце "А" - с-старые, н-новые.... Если в блоке поменять "С" на "Н" и нажать кнопку "сортировка", то этот блок должен переместиться из категории "старые" в категорию "новые". Количество блоков может изменяться.
уже голова раскалывается от идей, но никак не могу придумать, и похожего не нахожу по форумам...

если есть время и желание - помогите!

Заранее благодарю всех откликнувшихся!

Автор - urlchik
Дата добавления - 05.11.2018 в 16:44
InExSu Дата: Среда, 07.11.2018, 08:03 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!

Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)

Из оставшегося: перемещайте выделенные строки мышкой зажав шифт.


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!

Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)

Из оставшегося: перемещайте выделенные строки мышкой зажав шифт.

Автор - InExSu
Дата добавления - 07.11.2018 в 08:03
urlchik Дата: Среда, 07.11.2018, 12:46 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)

Я просто убрал все что делал, чтоб не путать своими идеями откликнувшихся. Были идеи со сдвигом всего диапазона вниз, а потом по условию вставлять строки назад в нужные места, вторая идея - практически то же но с копированием на другой лист... но это все громоздко и медленно работает.

Теперь есть мысль (описанная в посте) - но не знаю как реализовать (так как в ВБА я , можно сказать лузер)
Логика я думаю такая - если строка содержит значение "Новые" то блок(диапазон), в котором в столбце "А"(объедененная ячейка) есть значение "н" вставить под строкой "Новые"... и так дальше

если логика правильная, то моя проблема заключается в написании этой логики на ВБА, при чем адреса блоков и категорий при сортировке меняются.

п.с. я понимаю и читал форум - НИКТО ЗА ВАС РАБОТУ ДЕЛАТЬ НЕ БУДЕТ... но так как я пытаюсь научиться ВБА и понять что-как работает, то и прошу это сделать за меня(с комментариями в коде), дабы в будущем не беспокоить ЗНАЮЩИХ И УМЕЮЩИХ ЛЮДЕЙ!


Век живи - век учись!
 
Ответить
Сообщение
Вы хорошо потрудились, чтобы сделать проблематичным использовать стандартную сортировку :-)

Я просто убрал все что делал, чтоб не путать своими идеями откликнувшихся. Были идеи со сдвигом всего диапазона вниз, а потом по условию вставлять строки назад в нужные места, вторая идея - практически то же но с копированием на другой лист... но это все громоздко и медленно работает.

Теперь есть мысль (описанная в посте) - но не знаю как реализовать (так как в ВБА я , можно сказать лузер)
Логика я думаю такая - если строка содержит значение "Новые" то блок(диапазон), в котором в столбце "А"(объедененная ячейка) есть значение "н" вставить под строкой "Новые"... и так дальше

если логика правильная, то моя проблема заключается в написании этой логики на ВБА, при чем адреса блоков и категорий при сортировке меняются.

п.с. я понимаю и читал форум - НИКТО ЗА ВАС РАБОТУ ДЕЛАТЬ НЕ БУДЕТ... но так как я пытаюсь научиться ВБА и понять что-как работает, то и прошу это сделать за меня(с комментариями в коде), дабы в будущем не беспокоить ЗНАЮЩИХ И УМЕЮЩИХ ЛЮДЕЙ!

Автор - urlchik
Дата добавления - 07.11.2018 в 12:46
RAN Дата: Среда, 07.11.2018, 13:12 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Пишем макрорекордером 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
[/vba]

Автор - RAN
Дата добавления - 07.11.2018 в 13:12
boa Дата: Среда, 07.11.2018, 13:37 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
urlchik,
Excel - Электронные таблицы
Таблица - по умолчанию несет информацию в каждой строке(даже если строка пустая)
Здесь ваша первая ошибка, т.к. у вас данные по одной записи разбиты на две строки, а ячейка с ключом для сортировки только одна, но вы ее объединили со смежной ячейкой и решили, что она размножается(это вторая ошибка)
Если исправить предыдущие ошибки, то можете использовать встроенный инструмент "Промежуточные итоги"(см.вложение)

Убрали итоги - отсортировали - добавили итоги и т.д..

А то, что вы пытаетесь сделать это упорядочивание отдельных таблиц размером более чем в 1 строку по какому-то одному полю из этой таблицы...
К сообщению приложен файл: 8352958_2.xlsm (28.0 Kb)




Сообщение отредактировал boa - Среда, 07.11.2018, 13:37
 
Ответить
Сообщениеurlchik,
Excel - Электронные таблицы
Таблица - по умолчанию несет информацию в каждой строке(даже если строка пустая)
Здесь ваша первая ошибка, т.к. у вас данные по одной записи разбиты на две строки, а ячейка с ключом для сортировки только одна, но вы ее объединили со смежной ячейкой и решили, что она размножается(это вторая ошибка)
Если исправить предыдущие ошибки, то можете использовать встроенный инструмент "Промежуточные итоги"(см.вложение)

Убрали итоги - отсортировали - добавили итоги и т.д..

А то, что вы пытаетесь сделать это упорядочивание отдельных таблиц размером более чем в 1 строку по какому-то одному полю из этой таблицы...

Автор - boa
Дата добавления - 07.11.2018 в 13:37
InExSu Дата: Среда, 07.11.2018, 15:02 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
научиться ВБА

Работает вот так
Код во вложении
К сообщению приложен файл: ___.xlsb (44.9 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
научиться ВБА

Работает вот так
Код во вложении

Автор - InExSu
Дата добавления - 07.11.2018 в 15:02
urlchik Дата: Среда, 07.11.2018, 15:50 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Код во вложении

ВЫ ГЕНИЙ!!! Плюсанул! Огромнейшее СПАСИБО! То что надо!

И естественно - спасибо boa & RAN - Ваши коды и советы принимаю к сведению


Век живи - век учись!
 
Ответить
Сообщение
Код во вложении

ВЫ ГЕНИЙ!!! Плюсанул! Огромнейшее СПАСИБО! То что надо!

И естественно - спасибо boa & RAN - Ваши коды и советы принимаю к сведению

Автор - urlchik
Дата добавления - 07.11.2018 в 15:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сложная сортировка на листе по условию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!