3

Итак, у меня есть куча данных в таблице Excel, которая выглядит примерно так:

Level   Hierarchy       Name
0       1               Sam
1       1.1             Bill
2       1.1.1           George
3       1.1.1.1         Fred
4       1.1.1.1.1       Richard
4       1.1.1.1.2       Steve
4       1.1.1.1.3       Max
4       1.1.1.1.4       Sven
3       1.1.1.2         Mike
4       1.1.1.2.1       John
4       1.1.1.2.2       Isaac
4       1.1.1.2.3       Zack
2       1.1.2           James
3       1.1.2.1         Henry
4       1.1.2.1.1       Greg
            .
            .
            .

Я хотел бы автоматически создавать группы на листе, чтобы Ричард, Стив, Макс и Свен были сгруппированы под Фредом; Джон, Исаак и Зак находятся под Майком; так далее...; и все они сворачиваются под Сэмом.

Я пытался использовать функцию автоматического наброска в Excel, но получаю сообщение «Невозможно создать контур». Может кто-нибудь сказать мне, как сделать эту работу или предложить другой способ сделать это?

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

5 ответов5

4

Если у вас есть конечное количество уровней, то я бы сделал следующее. Если ваши данные когда-либо нужно обновлять, то их преимущество заключается в простом обновлении сводных данных (то есть вы настраиваете их только один раз):

  1. Создайте новые столбцы (число = максимальный уровень) для представления босса человека на каждом уровне иерархии (обратите внимание, предполагается, что он отсортирован по полю hiearchy)

  2. Формула в D3 и копируется снова и вниз: =IF($B3=D$2,$A3,IF($B3<D$2,"",D2))

  3. Создайте сводную таблицу (компактный или контурный вид в зависимости от ваших предпочтений), задавая каждого уровня босса как метку строки
  4. Отфильтруйте пустых боссов на каждом уровне

3

Чтобы использовать функцию группировки автоматически, необходимо (вручную) вставить итоговые строки с помощью функции Subtotal (). Затем Excel распознает это как точку останова для группировки. Для получения дополнительной информации см. Статью Microsoft Outline (группа) данных на листе.

1

Я бы загружал эту таблицу в Power Pivot и выравнивал иерархию по уровням, используя функции DAX, например, PATHITEM.

http://www.powerpivotblog.nl/powerpivot-denali-parent-child-using-dax/

Если вы не можете использовать Power Pivot, то я получу исходную систему, чтобы аналогично выровнять иерархию по столбцам уровня.

Презентация будет в сводной таблице, где вы можете развернуть узлы. Это автоматически адаптируется к новым данным по мере их поступления без использования формул.

Большая оговорка заключается в том, что вам нужно зафиксировать максимальное количество уровней.

0

Код VBA для автоматической группировки строк по номеру в столбце иерархии

For i = 3 To RowLength 
    On Error Resume Next
    levelNo = Len(Cells(i, WBSColNo)) - Len(Replace(Cells(i, WBSColNo), ".", "")) + 1
    Rows(i).OutlineLevel = levelNo  
 Next

Искренне

0

Под строками связанных макросов (авто-контуров) ниже столбца иерархии. Просто выберите номера уровней (отформатированные с полными остановками [столбец иерархии]) и запустите макрос. Работает в диапазоне и в таблице. Итого, количество и т.д. Не будет добавлено.

Сгруппированные строки

VBA Code - автоматическая группировка строк

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .