Страницы: 1
RSS
Разгруппировка (многоуровневая) данных - приведение в табличный вид
 
Добрый день!
Помогите разобраться с кашей - как разгруппировать ранее сгруппированные данные. Так, что бы получился табличный вид.
Для лучшего понимания - пример во вложении.
На вкладке результат - то, что требуется.
Ну и мои размышления по этому поводу, как я делал ЭТО вручную.
1. Во первых, посчитал сколько значений сгруппировано. Т.е. получил количество строк.
2. Начинал разгруппировывать снизу - т.к. нижнее значение всегда в какой-то группе.
3. По нижнему значению смотрел в какой группе оно находится.
4. Поднимался на строку выше - значение в этой же группе?
5. Если нет - группа выше - это НАДгруппа? - если нет - то это значит что группа выше - в этой же группе, что и текущая группа. Если да - понимаю, что это новая группа в новой НАДгруппе.

Как-то так...

Думаю, постоянно все сталкиваются с такой кашей и как ее привести в божеский вид..

Спасибо всем!
 
Приложите более реальный пример. Вместо пронумерованных групп и материалов какую-нибудь номенклатуру вставьте, а то не совсем наглядно, что Вы хотите. Например с Группой5. Нормальная разгруппировка не так должна выглядеть. Патроны/минометы можно заменить на бананы/апельсины
А пока, для начала, макрос для разнесения уровней в разные столбцы. Может так нагляднее будет
Код
Sub GroupToTable()
Dim iCell As Range
Dim I&, J&, lRow&
Dim arr()
With Worksheets("группировка")
  .Outline.ShowLevels (8)
  lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  ReDim arr(1 To .Range("A3:A" & lRow).Rows.Count, 1 To 8)
  For Each iCell In .Range("A3:A" & lRow).Cells
    If Not IsEmpty(iCell) Then
      I = I + 1:  J = iCell.Rows.OutlineLevel
      arr(I, J) = iCell.Value
    End If
  Next
  .Range("D3").Resize(I, 8) = arr
End With
End Sub
Изменено: Sanja - 20.03.2025 03:47:17
Согласие есть продукт при полном непротивлении сторон
 
Добрый день!
Спасибо за ответ!

Реальный файл не выкладывал специально.
Там все намного хуже((

Сейчас выкладываю - во вложении.
Желтым цветом отметил:
- в строках - то значение, которое интересует для дальнейшей работы
- в столбце - те значения, которые на пересечении с желтой строкой имеют значения для дальнейшей работы.

Суть вопроса - как вообще разгруппировать многоуровневую группировку так, что бы получить что-то напоминающее таблицу.
Таблицу, где в строке,  в начальных СТОЛБЦАХ - группы, по порядку группировки. Далее по строке - значения

Надеюсь понятно об чем речь.

Спасибо!
 
Есть способ делать вручную(долго и ужасно) когда по очереди группируете данные (например с 6 к 5 ступени) и красить только эту группу( ctrl+g -> выделить-> выделить только видимые участки). Таким образом у вас будет каждая группа иметь свой цвет, дальше по фильтру переносить данные на следующую строку и протягивать.
Такой способ занимает до полу часа и подходит если не работают макросы или надо передать файл другому человеку кто в нем не разбирается
 
Просмотрите мой метод(группировка если верно учесть то работает хорошо)
 
Цитата
написал:
Есть способ делать вручную(долго и ужасно) когда по очереди группируете данные (например с 6 к 5 ступени) и красить только эту группу( ctrl+g -> выделить-> выделить только видимые участки). Таким образом у вас будет каждая группа иметь свой цвет, дальше по фильтру переносить данные на следующую строку и протягивать.Такой способ занимает до полу часа и подходит если не работают макросы или надо передать файл другому человеку кто в нем не разбирается
Спасибо за участие!

Вручную - это с ума можно сойти.
10 отчетов по 6000 строк ежедневно??
(приложил оригинал)

Дело даже не в примере/оригинале.
Надо какой-то всеядный инструмент.
На любой случай самой ужасной группировки. Сегодня одна группировка у меня - завтра другая у кого-то еще.
 
Иван Иванов, вот правее добавил два столбца с помощью UDF
Но пришлось файл урезать, иначе не лезет на форум.
Если эти два столбца помогут, и будете использовать UDF - пишите.
Для собственно разгруппировки служит один столбец, второй для разобъединения данных, оно может быть и не нужно смотря по ситуации, тут вроде как нужно чтобы взять данные.
Кстати универсальный инструмент!
P.S. и вот ещё рядом протянуть такую формулу:
Код
=ЕСЛИ(I12=1;J12;K11)

ставим группу

Т.е. протягиваем две UDF и одну формулу, меняем их на значение, удаляем всё лишнее - готово!
Вот в файле готовое - удалил все БУ
Изменено: Hugo - 20.03.2025 18:32:06
 
Ммм...
А как Вы определили уровень группировки??
 
Цитата
Иван Иванов написал:
А как Вы определили уровень группировки??
- если вопрос ко мне - так я написал: UDF
По сути только она одна и нужна, вторая борется с объединениями, но это очевидно локальная проблема.
Код
Function iLevel(r As Range)
    iLevel = r.IndentLevel
End Function

Function MergedValue(r As Range)
If r.MergeCells Then
    MergedValue = r.MergeArea.Cells(1).Value
Else
    MergedValue = r.Value
End If
End Function
Изменено: Hugo - 24.03.2025 13:13:25
 
Ок!
Спасибо!

Вопрос решен!
Страницы: 1
Читают тему
Наверх