Страницы: 1
RSS
Сортировка групп по максимальному значению
 
Добрый день! Очень нужна помощь.
Есть несколько групп и необходимо их на постоянной основе сортировать по убыванию максимального значения внутри этих групп. Группы нельзя смешивать. Было бы здорово еще воспользоваться группировкой, чтобы скрывать и открывать группы, видя в скрытом формате только название группы (семейства) и макс. значение, как на скриншоте.




Пример данных в формате было/стало прикладываю  
 
мхи выиграли!
это мне напомнило старую анекдотическую ситуацию:
Бал у Болконских, затеяли играть в прятки. выпало водить Наташе Ростовой
все попрятались, через некоторое время она нашла всех. нет только Жревского
Наташа выходит на балкон и кричит в сад:
-- поручик, я сдаюсь. выходите! поручик, где вы спрятались?
голос Ржевского:
-- Наташа, во мху я!

jamoto, извините, макрос вас устроит?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
jamoto,
можно тупо в PQ на кнопках
 
evgeniygeo, хотелось бы без PQ
Ігор Гончаренко, спасибо за анекдот:) если стандартными методами никак, то попробую разобраться с макросом
 
День добрый
А чем сводная не пойдет? Там и группировку и сортировку можно настроить
 
можно и без PQ
Разве, что папоротники (группа 1) окажутся ниже мхов (группа 2).
Предлагаю добавить в ячейку F2 вспомогательную формулу вида
Код
=ЕСЛИОШИБКА(ПОДСТАВИТЬ($B2;"№";"")+$E2/1000;"")
и протянуть её по всем значимым строкам.

Тогда по новому столбцу можно будет отсортировать старую таблицу, либо при помощи связки ИНДЕКС+ПОИСКПОЗ (либо ВПР, но тогда новый столбец придется переносить влево) создать новую таблицу.
 
Павел \Ʌ/, спасибо, но, насколько я понял, у вас сортировка идет по сумме значений в группе, а не по максимальному значению внутри группы
IKor, спасибо большое. Подумаю, стоит ли создавать новый столбец
 
jamoto,
можете сделать в сводной вместо суммы максимум
 
jamoto,
ну и макросом как вариант
Код
Sub формирование()
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
r_start = 3
r_start2 = 2
For n = 2 To lLastRow
    If Cells(n, 1) = "" Then
        r_finish = n - 1
        Cells(n, 1) = Cells(n - 1, 1)
        Cells(n, 2) = Cells(n - 1, 2)
        Cells(n, 4) = Application.WorksheetFunction.Max(Range(Cells(r_start, 4), Cells(r_finish, 4)))
        Range(Cells(r_start2, 4), Cells(r_finish, 4)).Rows.Group
        Range("A" & n & ":D" & n).Font.Bold = True
        r_start = n + 1
        r_start2 = n + 1
    End If
Next

Call сортировка
    
End Sub

Sub сортировка()
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .SetRange Range("A1:D" & lLastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With
End Sub
 
Мне кажется, тут макросы излишни. Ну удобный же инструмент - сводная таблица. Пара кликов без кодинга и все готово в любом нужном виде.
Изменено: surkenny - 15.08.2023 09:25:53
 
Цитата
у вас сортировка идет по сумме значений в группе, а не по максимальному значению внутри группы
там две сортировки: сначала по группам, потом внутри групп
Страницы: 1
Наверх