Как получить Excel, чтобы автоматически обрисовать иерархию в группы?

51043
JoeNahmias

Итак, у меня есть куча данных в таблице 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 - если это облегчит задачу.

3

5 ответов на вопрос

4
Madball73

If you have a finite number of levels, then I would do the following. If your data ever has to be refreshed, it has the advantage of being a simple pivot refresh (i.e. you set it up just once):

  1. Create new columns ( number=max level) to represent the person's boss at each level of the hierarchy (note, it assumes it is sorted by hiearchy field) enter image description here

  2. Formula in D3 and copied over and down: =IF($B3=D$2,$A3,IF($B3<D$2,"",D2))

  3. Create a pivot table (compact or outline view depending on your preference), setting each level boss as a row label
  4. Filter blank level bosses out at each level

enter image description here

Это очень хорошо. Однако сводная таблица не позволяет свернуть все записи на определенном уровне, как это делает группировка. JoeNahmias 9 лет назад 0
На самом деле, это так. Щелкните правой кнопкой мыши на любом человеке нужного уровня (или, если в форме контура, щелкните правой кнопкой мыши номер уровня), затем выберите «Развернуть / Свернуть-> Свернуть все поле». Madball73 9 лет назад 1
@ Madball73 Есть ли способ сделать это автоматически с VBA? У меня есть это http://stackoverflow.com/questions/35865413/automatic-grouping-excel-vba/35865903?noredirect=1#comment59404015_35865903, но оно не выполняет подгруппы. Mert Karakaya 8 лет назад 0
3
teylyn

In order to use the auto-outline grouping feature, you need to (manually) insert summary rows with the Subtotal() function. Excel will then recognize this as the break point for the grouping. For details see the Microsoft article Outline (group) data in a worksheet.

Есть ли способ автоматизировать это? У меня более 5000 строк, и я даже не уверен, что бы я добавил в функцию промежуточного итога JoeNahmias 10 лет назад 0
Если вы не хотите подытоживать какие-либо числа, то есть, если вы хотите группировать только для того, чтобы можно было свернуть определенные разделы, то вам нужно применить группировку вручную. Функция группировки сильно отсутствует, ИМХО. Возможно, Excel - не тот инструмент, который вы хотели бы достичь. teylyn 10 лет назад 0
1
Mike Honey

I would load this table into Power Pivot and flatten the hierarchy into levels, usi the DAX functions e.g. PATHITEM

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

If you cant use Power Pivot then I would get the source system to flatten the hierarchy into level columns in a similar way.

The presentation would be in a Pivot Table, where you can expand the nodes. This will automatically adjust to new data as it comes in, without fiddling with formulas.

The big caveat is that you have to fix the maximum number of levels.

Аналогично ответу от MadBall73, но с добавленным дополнительным инструментом ... JoeNahmias 9 лет назад 0
0
Karmo

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

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

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

Как только я нашел источник для макроса на archive.org, я смог получить этот ответ, и он сделал именно то, что мне нужно. Я отредактировал ответ, чтобы связать его с Гистом, который я извлек оттуда, так что, надеюсь, ссылка на ответ скоро будет доступна. TheXenocide 6 лет назад 0
0
Hossein Zarrinzadeh

Код 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 

Искренне

Похожие вопросы